1

所以我试图利用 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);   
    }
4

2 回答 2

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对象本身具有到布尔的专门转换,指示操作是否成功,并且当您到达相应流的末尾时它将准确地失败。

于 2011-09-08T17:46:15.220 回答
2

while !eof几乎总是错的。

切换到另一本 C++ 书籍,并告诉我们您现在正在使用哪一本,以便我们可以进行相应的模拟和警告。

while (file.getline(str,80)) {
    cout<<str<<endl;
    istringstream iss(str);
    while (iss >> sstr) {
       cout << "Substring: " <<sstr << endl;
    }
}
于 2011-09-08T17:47:16.937 回答