我正在尝试使用string::find方法来确定.txt文件行中是否存在字符串“hello”(前后带有空格)。如果是这样,它应该打印出行号(位置不重要)。问题是,它找不到字符串。请帮忙。

int main() {
    string key (" hello ");
    ifstream myReadFile;
    myReadFile.open("test.txt");
    string s;
    int lineCount = 1;
    int found;
    if (myReadFile.is_open()) {
        while (!myReadFile.eof()) {
            getline(myReadFile, s);
            found = s.find(key);
            if(found != string::npos) {
                cout<<lineCount<<endl;
                lineCount++;
            }
         }
    }
    myReadFile.close();
    return 0;
}

最佳答案

您所拥有的似乎只是在计算其中包含该字符串的行数。您应该在循环的每次迭代中增加行号var,而不仅仅是在找到字符串时。

int main() {
    std::string key (" hello ");
    ifstream myReadFile;
    myReadFile.open("test.txt");


    if (myReadFile) {

        std::string line;
        int line_number = 0;
        while (std::getline(myReadFile, line)) {
            line_number++;
            if (line.find(key) != std::string::npos)
                std::cout << line_number << std::endl;
        }

    } else {
        std::cout << "Error opening file\n";
    }
}

10-08 00:31