【问题标题】:Sum all integers in a string C++对字符串 C++ 中的所有整数求和
【发布时间】:2013-06-27 18:28:05
【问题描述】:

我的代码中有一个 C++ 字符串,类似于:

"1 2 3 4 5 6 7 8"

我知道这个字符串是由一个空格字符分隔的整数组成的。我如何对它们求和?

我是一个 C++ 新手,在 Java 中我只会这样做:

String str = "1 2 3 4 5 6 7 8";
int sum = 0;


for (int i = 0; i < str.split(" ").length; i++ {
    sum += Integer.parse(str.split(" ")[i];
}

如何在 C++ 中使用我的字符串对象做这样的事情?

有人建议我stringstream,但我仍然无法理解这个对象,我需要完整地读取字符串,获取其中的每一个数字。

提前致谢!

更新:有些人很乐意帮助我,但仍然没有用。也许是因为我以前没有澄清的问题的一些怪癖。就这样吧:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;


int main()
{
freopen("variable-exercise.in", "r", stdin);

int sum = 0, start = 0;
string line;


while(getline(cin ,line)) {
    istringstream iss(line);

    while(iss >> start) {
        sum += start;
    }

    cout << start << endl;
    sum = start = 0;
}

return 0;
}

啊,输入文件包含以下内容:

1
3 4
8 1 1
7 2 9 3
1 1 1 1 1
0 1 2 5 6 10

因此,对于每一行,程序必须打印字符串行中所有整数的总和。此示例将生成:

1
7
10
21
5
24

谢谢

【问题讨论】:

    标签: c++ string text split


    【解决方案1】:

    有人建议我使用字符串流,但我仍然无法理解这个对象,我需要完整地阅读字符串

    我猜你得到了一个很好的建议。使用std::istringstream,您可以一个接一个地读取值,就像从标准输入(或任何其他输入流)中读取它们一样。

    例如:

    #include <sstream>
    #include <string>
    #include <iostream>
    
    int main()
    {
        // Suppose at some time you have this string...
        std::string s = "1 2 3 4 5 6 7 8 9 10";
    
        // You can create an istringstream object from it...
        std::istringstream iss(s);
    
        int i = 0;
        int sum = 0;
    
        // And read all values one after the other...
        while (iss >> i)
        {
            // ...of course updating the sum each time
            sum += i;
        }
    
        std::cout << sum;
    }
    

    【讨论】:

    • 显式构造std::string的原因是什么?
    • @H2CO3:没有什么特别的原因,我认为在某些时候 OP 可能会以 string 对象结束(可能是由其他函数构造的),并希望从中获取数字它。
    • 安迪是正确的。我的更新更好地描述了问题并展示了真实世界的场景。希望大家还愿意看。
    • @rodrigoalves 那么,你有没有看我的答案或其他什么?
    【解决方案2】:

    像这样:

    std::stringstream s("1 2 3 4 5 6 7 8 9");
    int n = 0;
    int x;
    while (s >> x)
        n += x;
    
    std::cout << n << std::endl;
    

    修改后:

    cout << start << endl;
    

    这是错误的,您应该打印sum

    cout << sum << endl;
    

    【讨论】:

    • @rodrigoalves(什么样的更新?没有对您的问题进行编辑。)嗯,它必须有效。 Demonstration.
    • 对不起,我在真正完成更新之前发表了评论。它在那里。对不起。
    • @rodrigoalves 阅读您的代码。您不是在打印总和,而是最后一个值。见编辑。
    【解决方案3】:

    我使用 C 代码来解决这个问题。这是最终的解决方案:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char *c;
        char line[100];
        int x, sum = 0;
    
        while(gets(line)) {
            for(c = strtok(line, " "); c ; c = strtok(NULL, " ")) {
                sscanf(c, "%d", &x);
                sum += x;
            }
    
            printf("%d\n", sum);
            sum = 0;
        }
    
        return 0;
    }
    

    希望对遇到同样问题的人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多