且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C++ 在文本文件中搜索特定字符串并返回该字符串所在的行号

更新时间:2023-02-18 20:03:17

只需使用计数器变量来跟踪当前行号.每次您调用 getline 时,您...读取一行...所以在那之后增加变量.

Just use a counter variable to keep track of the current line number. Each time you call getline you... read a line... so just increment the variable after that.

unsigned int curLine = 0;
while(getline(fileInput, line)) { // I changed this, see below
    curLine++;
    if (line.find(search, 0) != string::npos) {
        cout << "found: " << search << "line: " << curLine << endl;
    }
}

还有……

while(!fileInput.eof())

应该是

while(getline(fileInput, line))

如果读取时发生错误 eof 将不会被设置,所以你有一个无限循环.std::getline 返回一个流(你传递给它的流),它可以隐式转换为 bool,它告诉你是否可以继续阅读,而不仅仅是如果你在文件的末尾.

If an error occurs while reading eof will not be set, so you have an infinite loop. std::getline returns a stream (the stream you passed it) which can be implicitly converted to a bool, which tells you if you can continue to read, not only if you are at the end of the file.

如果设置了eof,你仍然会退出循环,但是如果设置了bad,你也会退出,当你阅读时有人删除了文件它等等.

If eof is set you will still exit the loop, but you will also exit if, for example, bad is set, someone deletes the file while you are reading it, etc.