7

検索したい特定の文字列の行番号を返すことができる特定の関数が 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;

これにより、行番号の後に検索された文字列が返されます。

4

2 に答える 2

16

現在の行番号を追跡するには、カウンター変数を使用するだけです。あなたがあなたに電話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が設定されている場合や、ファイルの読み取り中に誰かがファイルを削除した場合などにも終了します。

于 2012-09-17T16:49:19.423 に答える