3

我正在尝试读取数据并解决简单的问题,数据:

3               - number of lines to read in
1 1
2 2 2
3 4 

输入每一行后,我想获得输入数字的总和,但每行中的整数数是未知的。使用上述数据屏幕后应如下所示:

3               
1 1
Sum: 2
2 2 2
Sum: 6
3 4 
Sum: 7

但是从我的算法中我得到了输出:

3
1 1
Sum: 1
2 2 2
Sum: 4
3 4
Sum: 3

我已经编写了代码,但它不能正常工作(如上): 版本
我改进了我的代码并且知道它在没有字符串等的情况下可以正常工作,正确的代码如下:

#include<iostream>
using namespace std;
int main()
{
    int x;
    int t, sum;
    cin >> t;

    for(int i=0; i<t; i++) {
        sum=0;
        while(true)
        {
            cin >> x;
            sum = sum + x;  
            if(cin.peek()=='\n')
                break; //conditional break
        }
        cout << "Sum: " << sum << "\n";
    }
    return(0);
}
4

3 回答 3

5

一次读取一行,使用getline, 到类型的对象中std::string。然后使用该std::string对象初始化 type 的对象std::istringstream,并使用提取器int从流对象中读取值,直到它失败。然后返回并阅读下一行。大致:

std::string line;
while (std::getline(std::cin, line)) {
    std::istringstream in(line);
    int sum = 0;
    int value = 0;
    while (in >> value)
        sum += value;
    std::cout << sum << '\n';
}
于 2013-02-26T15:00:24.223 回答
1

C++ 为您提供了许多工具:

  • string是一个管理字符串生命周期的类。
  • getline将流中的一行(直到下一个换行符)放入string.
  • istringstreamistream一个string
  • istream_iterator遍历一个istream,提取给定的类型,打破空白。
  • accumulate采用迭代器来划分范围并将这些值相加:

共:

string line;
while (getline(cin, line)) {
    istringstream in(line);
    istream_iterator<int> begin(in), end;
    int sum = accumulate(begin, end, 0);
    cout << sum << '\n';
}
于 2013-02-26T15:23:05.647 回答
0

sum=0;// 在顶部

ps

while(cin.peek()!='\n'){


}
于 2013-02-26T15:01:20.887 回答