我已经了解了如何查找和阅读文本文件中的单词。我也理解你如何使用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吗?
提前致谢。
答案 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>>
。