2014-04-02 13 views
7

Mój program musi wyszukać słowo w pliku tekstowym, a jeśli znajdzie to słowo, wydrukować/wyświetlić całą linię. Przykład:Jak wyszukać słowo w pliku tekstowym i jeśli zostanie znalezione, wydrukuj całą linię

 
employee name date joined position  project  annual salary 
tom jones   1/13/2011  accountant pricing   55000 
Susan lee   2/5/2007  Manager  policy   70000 

użytkownik wpisze słowo kluczowe:

księgowy

Program przeszukuje tekst na accountant. Po znalezieniu zwraca następujący kod:

 
employee name date joined position  project  annual salary 
tom jones   1/13/2011  accountant pricing   55000 

To jest kod, który wymyśliłem, ale nie działa.

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

Odpowiedz

10

Prosta odpowiedź:

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

Generalnie, należy unikać mieszania < < i getline razem podczas czytania ze strumienia, ponieważ powoduje dziwne problemy z zakończeń linii.

+0

dziękuję Spróbuję tego teraz .. i odśwież wyniki, lub pytania. Zgaduję, gdzie masz słowo tok ... Zamierzam zastąpić literami .. gdzie dostaję dane wejściowe od użytkownika ..? – Darius

+0

zaktualizowano, ponieważ właśnie zauważyłem błąd. Instrukcja if powinna mieć ciąg! = String :: npos. A tak, po prostu zastąp żeton ciągu cokolwiek szukasz (księgowy w twoim przykładzie) – Kevin

+0

czy możesz pokazać mi, gdzie umieścić ciąg! = :: npos ... – Darius

Powiązane problemy