[英]C++ Reading fixed number of lines of integers with unknown number of integers in each line
我正在尝试读取数据并解决简单的问题data:
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
我已经编写了代码,但是无法正常工作(如上所述): EDITION
我改进了我的代码,并知道它在没有字符串等情况下也可以正常工作,下面是正确的代码:
#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);
}
使用getline
一次将一行读取到std::string
类型的对象中。 然后使用该std::string
对象初始化类型为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';
}
C ++提供了许多工具:
string
是管理字符串生存期的类。 getline
将流中的一行(直到下一个换行符)放入string
。 istringstream
从string
istringstream
一个istream
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';
}
放
sum=0;
// 在顶部
ps
while(cin.peek()!='\n'){
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.