我正在尝试创建一个程序,该程序将在给定目录txt文件中搜索某个字符串。一旦找到该字符串,程序将仅在txt文件中该行上的信息打印到屏幕上。我的代码能够检查字符串是否在文件中,但它不会打印仅包含其中的行,而是会打印除所需行之外的所有内容。

while(!inF.eof()){
    getline(inF, hold);
    if(hold.find(crnS)){
        isFound = 1;
        cout << hold << endl;
    }
}

最佳答案

您的代码有两个问题:

  • 请参阅Why is iostream::eof inside a loop condition (i.e. `while (!stream.eof())`) considered wrong?
  • std::string::find()返回一个索引,而不是bool。任何非零值都将被评估为true,因此索引0以外的任何返回值都将满足if语句,如果std::string::npos未找到匹配项,则包括find()(-1)。这意味着您的代码将输出在每行的最开始以外的地方找到crnS的每一行,以及根本没有找到crnS的每一行。

  • 使用此代替:

    while (getline(inF, hold)) {
        if (hold.find(crnS) != string::npos) {
            isFound = 1;
            cout << hold << endl;
        }
    }
    

    关于c++ - 如何使用getline从txt文件打印正确的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57797802/

    10-16 04:46