You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++求字符串中所有整数数字之和有没有更优的实现方案?

字符串数字求和的更优实现

你的原有实现可以大幅简化,核心优化点是不需要先拼接所有数字字符再拆分求和,遍历字符时遇到数字可以直接转成对应数值累加即可,C++标准规定数字字符'0'到'9'的ASCII值是连续递增的,用字符本身减去'0'就能直接得到对应的整数值。

优化后最简实现

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main() {
    string s = "124j3a.n2-'ad2'&1#vvg6";
    int sum = 0;
    for (char c : s) {
        if (isdigit(c)) {
            sum += c - '0';
        }
    }
    cout << sum << endl;
    return 0;
}

优化点说明

  • 仅需一次遍历即可完成计算,时间复杂度O(n),无额外内存开销,空间复杂度O(1),运行效率远高于原实现
  • 不存在拼接数字过长导致的stoi整数溢出问题,不管字符串内有多少个数字都能正常计算
  • 逻辑更直观,代码可读性更高
  • 补充了原代码缺失的<iostream>头文件依赖,符合C++标准语法要求

可选现代C++ STL写法

如果你偏好函数式风格,可以用std::accumulate实现一行求和:

#include <iostream>
#include <string>
#include <cctype>
#include <numeric>

using namespace std;

int main() {
    string s = "124j3a.n2-'ad2'&1#vvg6";
    int sum = accumulate(s.begin(), s.end(), 0, [](int acc, char c) {
        return isdigit(c) ? acc + (c - '0') : acc;
    });
    cout << sum << endl;
    return 0;
}

内容的提问来源于stack exchange,提问作者jaideep singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:24:01