2016-05-10 7 views
0

das ist meine aktuelle Lese Datei Code:C++ Wie kann ich Symbole beim Lesen einer Datei ignorieren?

void Dictionary::processFile() { 
    ifstream fin; 
    fin.open("article.txt"); 
    if (fin.fail()) { 
     cout << "Input file opening failed.\n"; 
     exit(1); 
    } 

    string word; 

    while (!fin.eof()) { 
     fin >> word; 
     cout << word << endl; 
    } 
    cout << endl; 
    fin.close(); 
} 

Wie kann ich meinen Code machen ignorieren Symbole (“ ';.! Etc.)? Und nur Ausgang/Lese Worte im Moment ist es jedes einzelne Lese Symbol auf dem Artikel. Beispiel „Test.“, „sie“

+4

Welche Art von Symbol meinst du? Können Sie ein minimales Beispiel für 'article.txt' angeben? – smkanadl

+7

Verwenden Sie nicht '! Fin.eof()' in der While-Bedingung, sondern legen Sie "fin >> word" direkt als Bedingung. Siehe [Warum wird iostream :: eof in einer Schleifenbedingung als falsch angesehen?] (Http://stackoverflow.com/q/5605125/1942027) für weitere Informationen. –

+0

@smkanadl im Grunde alle Symbole mögen. ,; '"/! @ etc. – nanjero05

Antwort

2

lesen „Wörter“ ähnlich wie Sie es jetzt tun, aber dann filtern Sie die unerwünschten Zeichen aus der Zeichenfolge vor dem Ausdrucken des "Wortes".

C++ haben viele algorithmic functions, die Ihnen dabei helfen können. Für Ihren Zweck könnten Sie z.B. std::remove_if und tun etwas wie

static std::string const symbols = "\".';:!"; 

while (fin >> word) 
{ 
    word.erase(std::remove_if(word.begin(), word.end() [symbols&](char const& ch) { 
     return std::any_of(symbols.begin(), symbols.end(), [ch](char const& sym) { 
      return ch == sym; 
     }); 
    }); 

    if (!word.empty()) 
    { 
     // Do something with the "word" 
    } 
} 
+1

Dies ist nicht besonders performant, jedoch nicht im Vergleich mit der Filterung bei der Eingabe in erster Linie, zumindest. –

+0

@LightnessRacesinOrbit meinst du eine Zeile lesen und verarbeiten a Zeichen zu einer Zeit, Token (Wörter) zu trennen? –

+0

@Bob__: Ich weiß nicht, was Sie mich fragen. –

Verwandte Themen