web-dev-qa-db-ja.com

テキストファイルで単語を検索し、見つかった場合は行全体を印刷する方法

私のプログラムは、テキストファイルでWordを検索し、そのWordが見つかった場合は、行全体を印刷または表示する必要があります。例:

従業員の名前日付入社ポジションプロジェクト年間給与

ユーザーが検索ワードを入力します:

会計士

プログラムはテキストでaccountantを検索します。それが見つかると、次を返します。

従業員名日付入社ポジションプロジェクト年間給与
トムジョーンズ2011年1月13日会計士価格55000 

これは私が思いついたコードですが、機能しません。

void KeyWord(ifstream &FileSearch)
{
     string letters;
     int position =-1;
     string line;
     ifstream readSearch;
     cout<<"enter search Word ";
     cin>>letters;
     "\n";
     FileSearch.open("employee");
     if(FileSearch.is_open())
     { 
         while(getline(FileSearch, line))
         {
             FileSearch>>line;
             cout<<line<<endl;
             position=line.find(letters,position+1);
             if(position==string::npos);
             if(FileSearch.eof())
                 break;

             cout<<line<<endl;
         }

     }
     cout<<"Cant find"<<letters<<endl;
 }
8
Darius

簡単な答え:

void Keyword(ifstream & stream, string token) {
    string line;
    while (getline(stream, line)) {
        if (line.find(token) != string::npos) {
            cout << line << endl;
        }
    }
    cout << token << " not found" << endl;
}

一般に、<<getlineは、streamから読み取るときに一緒に使用すると、行末で奇妙な問題が発生します。

14
Kevin