所以我试图利用istringstream来解析文本文件。我们的想法是按空间分解每一行,并根据子串做事。代码工作正常,除了两件事,它重复计算每一行的最后一个子字符串,当它完成读取文件时它会出错。我之前没有使用过sstream,所以任何见解都会有所帮助。
file.getline(str,80);
while(!file.eof())
{
cout<<str<<endl;
istringstream iss(str);
while (iss)
{
iss >> sstr;
cout << "Substring: " <<sstr << endl;
}
file.getline(str,80);
}
答案 0 :(得分:5)
while
循环应该是这样的:
std::string line;
while (std::getline(file, line))
{
std::istringstream iss(line);
std::string token;
while (iss >> token)
{
cout << "Substring: " << token << endl;
}
}
getline
和输入操作返回流对象,该对象本身具有指向操作是否成功的bool的专门转换,并且当您到达相应流的末尾时它将精确失败。 / p>
答案 1 :(得分:2)
while !eof
is almost always wrong
切换到另一本C ++书籍,并告诉我们您现在正在使用哪本书,以便我们可以相应地进行模拟和警告。
while (file.getline(str,80)) {
cout<<str<<endl;
istringstream iss(str);
while (iss >> sstr) {
cout << "Substring: " <<sstr << endl;
}
}