2014-04-02 10 views
7

Il mio programma deve cercare una parola in un file di testo e, se trova tale parola, stampare/visualizzare l'intera riga. Esempio:Come cercare una parola in un file di testo e se trovato stampare l'intera riga

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

utente inserisce una parola di ricerca:

contabile

Programma ricerche di testo per accountant. Quando lo trova, restituisce quanto segue:

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

Questo è il codice che è venuto fuori ma non funziona.

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

risposta

10

Risposta facile:

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

In generale, evitare di miscelare < < e getline insieme durante la lettura da un flusso in quanto causa problemi strani con la fine della riga.

+0

grazie Ci proverò ora e ripubblicherò i risultati, o i quesitons .. Sto indovinando dove hai la parola token..Im andando a sostituire con le lettere .. dove ottengo input dall'utente ..? – Darius

+0

aggiornato da quando ho appena notato un bug. L'istruzione if dovrebbe avere un! = String :: npos. E sì basta sostituire il token di stringa con quello che stai cercando (ragioniere nel tuo esempio) – Kevin

+0

puoi mostrarmi dove posizionare il! = String :: npos ... – Darius