2009-07-26 8 views
0

基本的にこのプログラムは.txtファイルで単語を検索し、見つかった場合は行と行番号を出力します。ここまで私がこれまで持っていたことがあります。行の一部を読む(getline())

コード:

#include "std_lib_facilities.h" 

int main() 
{ 
    string findword; 
    cout << "Enter word to search for.\n"; 
    cin >> findword; 

    char filename[20]; 
    cout << "Enter file to search in.\n"; 
    cin >> filename; 
    ifstream ist(filename); 

    string line; 
    string word; 
    int linecounter = 1; 
    while(getline(ist, line)) 
    { 
    if(line.find(findword) != string::npos){ 
      cout << line << " " << linecounter << endl;} 
    ++linecounter; 
    } 

    keep_window_open(); 
} 

解決しました。

答えて

4

if (line.find(findword) != string::npos) { ... } 
+0

これはまさに私が探していたものです。しかし、私はまだ問題があります。それは単語がない結果を出力しています。 ! - string :: nposは含まれていませんでした。なぜなら、あなたがその意味を知っていなかったからです。私はコードを編集して、自分が持っているものを表示します。 – trikker

+0

!= string :: nposは、単語がその行に存在しない場合に比較する値です。つまり、findで返された結果がstring :: nposと等しくない場合は、単語が見つかったことを意味します。そうでなければ、行は無視されます。 – Milan

+0

忘れてしまいました。私はちょうどそれについていくつかの研究をします。 – trikker

-1

正規表現を使用して、行内の単語を見つけることができます。細部を手助けするのに十分なC++を知らないでください。

+0

http://stackoverflow.com/questions/329517/there-is-a-function-to-use-pattern-matching-using-regular-expressions -in-c – Reunanen

0

テキストファイルに名前の周囲にスペースがないことを確認してください。それ以外の場合は、istは次のように世話をしてみましょう:

while(ist >> line) 
{ 
if(line == findword){ 
     cout << line << " " << linecounter << endl;} 
++linecounter; 
} 

私はあなたの名前のファイルは、すべての行に名前が含まれていることを信じています。 >>を使用すると、余分なスペースがある場合はistが注意します。

1

あなたが示唆しているように、行を空白で区切られた単語またはトークンに分割してから、トークンのリストの中から目的のキーワードを検索します。あなたはfindを探している

関連する問題