C++ 中是否有一个特定的函数可以返回我要查找的特定字符串的行号?
ifstream fileInput;
int offset;
string line;
char* search = "a"; // test variable to search in file
// open file to search
fileInput.open(cfilename.c_str());
if(fileInput.is_open()) {
while(!fileInput.eof()) {
getline(fileInput, line);
if ((offset = line.find(search, 0)) != string::npos) {
cout << "found: " << search << endl;
}
}
fileInput.close();
}
else cout << "Unable to open file.";
我想在以下位置添加一些代码:
cout << "found: " << search << endl;
这将返回行号后跟被搜索的字符串。
最佳答案
只需使用一个计数器变量来跟踪当前行号。每次调用 getline
时,您...读取一行...因此只需在之后递增变量即可。
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
,它告诉你是否可以继续阅读,而不仅仅是如果你在文件的末尾。
如果设置了eof
,你仍然会退出循环,但如果设置了bad
,你也会退出循环,当你正在阅读时有人删除了文件它等
关于C++ 在文本文件中搜索特定字符串并返回该字符串所在的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463750/