使用stringstream在c ++中从字符串中提取整数时意外重复

时间:2015-02-01 17:01:42

标签: c++ input int stringstream

我正在尝试读取由空格分隔的整数组成的行组成的文件。我想将每一行存储为一个单独的整数向量。 所以我尝试逐行读取输入并使用

从中提取整数
stringstream

我用于提取的代码如下 -

#include <bits/stdc++.h>
using namespace std;

int main()
{
    freopen("input.txt","r",stdin);
    string line;
    while(getline(cin, line)) {
    int temp;
    stringstream line_stream(line); // conversion of string to integer.
    while(line_stream) {
        line_stream >> temp;
        cout << temp<< " ";
    }
    cout << endl;
   }
   return 0;
}

上面的代码可以工作,但它会重复最后一个元素。例如,输入文件 -

1 2 34
5 66

输出:

1 2 34 34
5 66 66

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

因此:

while(line_stream) {
    line_stream >> temp;
    cout << temp<< " ";
}

失败的原因与while (!line_stream.eof())失败的原因相同。

当你读完最后一个整数时,你尚未到达流的末尾 - 这将在下一次读取时发生。

下一次阅读是未经检查的line_stream >> temp;,它将失败并保持temp不受影响。

这种循环的正确形式是

while (line_stream >> temp)
{
    cout << temp<< " ";
}