需要从archive.txt中读取一行文本,直到找到“ hhh”,然后转到下一行

问题描述 投票:0回答:1

我的老师给了我这项作业,我需要从档案中读取单词,然后对它们进行一些处理。我的问题是这些单词必须以“ hhh”结尾:例如groundhhh,wallhhh等。在寻找一种方法时,我想出了fstream库中的getline函数。问题是getline(a,b,c)使用3个参数,第三个参数要读到找到“ c”为止,但是“ c”必须是char,所以对我不起作用。本质上,我要实现的目标是从存档中读取一个单词,例如“ egghhh”,并确保如果读取了“ hhh”,则表示该行在此处结束,并且我收到“ egg”作为单词档案。我的老师用“前哨”一词来形容这件事。

这是我的尝试:

    include iostream
    include fstream
    include string

    using namespace std;

    ifstream read_archive;

    void showListWords(){

        string word;

        string sentinel = "hhh";

        while (getline(read_archive,word,sentinel)){

            cout << word << endl;
        }
    }

   void openReadArchive(){

    read_archive.open("words.txt");

    if(read_archive.fail())

        cout << "There is something wrong with the archive" << endl;

}

p.s:对不起,英语破损

c++ c fstream getline
1个回答
0
投票

[std::getline()仅允许为其停止读取的“前哨”指定1个char,其中'\n'是默认值。

您可以使用此默认值,从文件中将整行文本读入std::string,然后将该字符串放入std::istringstream流中,并从中读取单词,直到到达流末尾为止。您发现以"hhh"结尾的单词。

[替代方法是从原始文件流中读取单词,在找到以"hhh"结尾的单词时停止,然后使用std::istream::ignore()忽略当前行的其余部分,然后再次继续读取单词。

© www.soinside.com 2019 - 2024. All rights reserved.