在C ++中使用sstream头文件

时间:2011-09-08 17:32:55

标签: c++ sstream

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

2 个答案:

答案 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;
    }
}