我试图通过逐行读取并使用stringstream
解析每一行来解析文件。这是我的代码的简化版本
#include <sstream>
#include <fstream>
#include <iostream>
using namespace std;
int main() {
fstream f("input.txt", ios::in);
stringstream ss;
string line;
while (getline(f, line)) {
cout << "Got line `" << line << "'" << endl;
ss.str(line);
string prefix;
ss >> prefix;
cout << "Prefix: " << prefix << endl;
}
return 0;
}
如果input.txt喜欢(↲用于表示换行符)
a b↲
c d↲
e f↲
一切都按建议工作,但适用于
等文件a↲
c d↲
e f↲
stringstream在a↲
行之后进入失败(不确定)状态。似乎stringstream
期望该行被空格终止或类似。当然,我可以手动添加空格或换行符。无论如何,我没有在stringstream
手册中找到有关此行为的任何信息。
所以我的问题是为什么会发生这种情况以及如何正确解决这个问题。
答案 0 :(得分:2)
当只有要提取的标记时,行ss >> prefix
到达EOF字符。您必须使用ss.clear()
清除标记:
ss.clear();
ss.str(line);