C ++在同一个读取循环中读取单词和行

时间:2015-02-24 12:27:07

标签: c++ search getline

我已经了解了如何查找和阅读文本文件中的单词。我也理解你如何使用getline()来读取文本并阅读某一行。

但是现在我想弄清楚如何在同一个“阅读循环”中使用它们。

这将是这样的:

    string S1="mysearchword01",S2="mysearchword02";
    char word[50];

    while(myfile.good()){  //while didn't reach the end line

         file>>word; //go to next word
         if (word==S1){ //if i find S1 I cout the two next words
             file>>a>>b;
             cout<<a<<" "<<b<<endl;}
             }
         else if (word==S2) {
            //****here I want to cout or save the full line*****    
             }
    }

那我可以用某种方式在那里使用getline吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

std::fstream::good()检查上一次I / O操作是否成功,并且虽然它以您实现它的方式工作,但实际上并不是您想要的。

使用getline(file, stringToStoreInto)代替while循环中对good()的调用,当到达文件末尾时,它也会返回false。

编辑:要从std::getline()获取的行中提取单个空白分隔的元素(单词),您可以使用std::stringstream,使用行字符串初始化它,然后提取单个单词那个字符串流进入另一个&#34;字&#34;使用>>运算符的字符串。

因此,对于您的情况,这样的事情会:

#include <sstream>

std::string line, word;

while (getline(file, line))
{
    std::stringstream ss(line);

    ss >> word;

    if (word == S1)
    {
        // You can extract more from the same stringstream
        ss >> a >> b;
    }

    else if (word == S2)
    {
        /* ... */
    }
}

或者,您也可以实例化一次stringstream对象并调用其str()方法,其中一个重载重置流,而另一个重载替换其内容。

#include <sstream>

std::stringstream ss;

std::string line, word;

while (getline(file, line))
{
    ss.str(line); // insert / replace contents of stream

    ss >> word;

    if (word == S1)
    {
        // You can extract more from the same stringstream
        ss >> a >> b;
    }

    else if (word == S2)
    {
        /* ... */
    }
}

您可以使用stringstream提取多个单词,而不仅仅是第一个单词,只需像以前一样继续调用operator>>