对字符串C+中的所有整数求和+; 我的代码中有一个C++字符串,类似于: "1 2 3 4 5 6 7 8"

对字符串C+中的所有整数求和+; 我的代码中有一个C++字符串,类似于: "1 2 3 4 5 6 7 8",c++,string,text,split,C++,String,Text,Split,我知道字符串是由一个空格字符分隔的整数组成的。我如何计算它们的总数 我是一个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]; } 啊,输入文件包含以下内容: 1 3 4 8 1 1 7 2 9 3 1 1 1 1 1 0 1

我知道字符串是由一个空格字符分隔的整数组成的。我如何计算它们的总数

<>我是一个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];
}
啊,输入文件包含以下内容:

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
谢谢

有些人建议我使用stringstream,但我仍然不能理解这个对象,我需要完全阅读字符串

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

例如:

#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;
}
#包括
#包括
#包括
int main()
{
//假设某个时候你有这个字符串。。。
std::string s=“1 2 3 4 5 6 7 8 9 10”;
//您可以从中创建istringstream对象。。。
标准:istringstream iss;
int i=0;
整数和=0;
//然后一个接一个地读取所有值。。。
while(iss>>i)
{
//…当然,每次都会更新总和
总和+=i;
}
std::cout像这样:

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;

我用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;
}
#包括
#包括
int main(){
char*c;
字符行[100];
整数x,和=0;
while(获取(行)){
对于(c=strtok(第行,“”);c;c=strtok(空,“”){
sscanf(c、%d、&x);
总和+=x;
}
printf(“%d\n”,总和);
总和=0;
}
返回0;
}

希望它能帮助任何可能有同样问题的人!

显式构造
std::string
的原因是什么?@H2CO3:没有特别的原因,我认为在某个时候OP可能会以
string
对象结束(可能是以某种方式由其他函数构造的)我想从中得到数字。安迪是对的。我的更新更好地描述了问题并展示了现实世界的场景。希望你们仍然愿意看它。@rodrigoalves那么,你们看了我的答案还是什么?@rodrigoalves(什么样的更新?没有对你们的问题进行编辑。)好的,它必须工作。对不起,我在实际完成更新之前发表了评论。就是这样。对不起。@rodrigoalves阅读了您的代码。您打印的不是总和,而是最后一个值。请参阅编辑。
cout << start << endl;
cout << sum << endl;
#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;
}