C++ searching text file for a particular string and returning the line number where that string is on

前端 未结 2 1136
醉话见心
醉话见心 2020-12-29 15:56

Is there a particular function in c++ that can return the line number of a particular string i want to find?

ifstream fileInput;
int offset;
string line;
cha         


        
相关标签:
2条回答
  • 2020-12-29 16:35

    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;
        }
    }
    

    Also...

    while(!fileInput.eof())

    should be

    while(getline(fileInput, line))

    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.

    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.

    0 讨论(0)
  • 2020-12-29 16:46

    A modified version of the accepted answer. [A comment on the answer as a suggestion would have been preferable but I can't comment yet.] The following code is untested but it should work

    for(unsigned int curLine = 0; getline(fileInput, line); curLine++) {
        if (line.find(search) != string::npos) {
            cout << "found: " << search << "line: " << curLine << endl;
        }
    }
    

    for loop makes it slightly smaller (but perhaps harder to read). And 0 in find should be unnecessary because find by default searches the whole string

    0 讨论(0)
提交回复
热议问题