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

如何用Lambda表达式通过std::accumulate累加字符串中的数字字符?

解决std::accumulate结合Lambda求和字符串数字字符的问题

你的错误源于误解了std::accumulate的Lambda参数含义:

  • 第一个参数a是当前累加的总和(类型与初始值一致,此处为int),并非字符串中的字符
  • 第二个参数b才是遍历到的字符串内单个数字字符

正确的逻辑应该是将当前字符转换为对应数字后,累加到总和上,而非把两个参数都当作字符处理。

修正后的完整代码:

#include <iostream>
#include <string>
#include <numeric> // 必须包含此头文件才能使用std::accumulate

int main() {
    std::string num = "1234567891011";

    int sum = std::accumulate(num.begin(), num.end(), 0, [](int a, char b) {
        return a + (b - '0'); // 把当前字符转成数字后加到累加总和上
    });

    std::cout << sum << std::endl; // 输出结果为48,符合预期
    return 0;
}

补充说明:

  • 无需给参数加&引用,int和char类型的拷贝开销可以忽略
  • 字符转数字的原理:ASCII编码中'0'到'9'是连续的,b - '0'会直接得到字符对应的整数(例如'5'-'0'=5)
  • 手动计算验证:1+2+3+4+5+6+7+8+9+1+0+1+1 = 48,与预期结果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:29:54