2016-05-18 20 views
0

Ich verwende diese derzeit 1 Wort zu einer Zeit, aus einer Textdatei zu lesen:C++ Wie kann ich Sätze aus einer Textdatei lesen?

int Dictionary::processFile(string file) { //receives a text file name to be read from user 
    string word; 
    int wordCount = 0; 

    ifstream fin; 
    fin.open(file.c_str()); 
    if (fin.fail()) { 
     cout << endl; 
     cout << "Input file opening failed.\n"; 
     return 0; 
    } 

    while (fin >> word) { 
     word = trimString(word); //trimString removes any symbols including spaces and words. only reads words. 
     exTree.ExtAvlTree_processNode(word); //processNode simply inserts the word into an avl tree. irrelevant to the question 
     wordCount++; 
    } 
    fin.close(); 
    return wordCount; 
} 

Wie kann ich es ändern zu können, 2-3 Worte auf einmal lesen, bevor es das Wort verarbeiten. zum Beispiel liest es ein Wort, dann verarbeitet es, dann liest es das gleiche Wort, aber fügt das nächste angrenzende Wort hinzu, so dass es eine Phrase wird (bestehend aus 2 Wörtern), dann liest es die gleichen 2 Wörter, aber fügt das 3. nächste Wort hinzu.

zusätzliche Frage, ob die oben acheiveable ist:

Wie kann ich trimString Funktion Entfernen Sie Leerzeichen zu stoppen und nur Symbole entfernen?

Dies ist die Trimm-String-Funktion:

string Dictionary::trimString(string input){ 
    stringstream ss; 
    for (int x = 0; x < (int) input.size(); x++) { 
     if(isalpha(input[x])){ 
      ss << input[x]; 
     } 
    } 

    if (ss.str().length() > 0) { 
     return ss.str(); 
    } else { 
     return ""; 
    } 
} 
+0

„Wie kann ich verhindern trimString Funktion Entfernen Sie Leerzeichen getrennt werden und nur Symbole entfernen? " -> sind keine Leerzeichen mehr Symbole? – ForceBru

+0

@ForceBru Wie kann ich Raum davon ausnehmen? – nanjero05

+0

* "Wie kann ich die trimString-Funktion stoppen, indem sie Leerzeichen löscht und nur Symbole löscht" * ... 'fin >> word' liest keine Leerzeichen, da sie als Trennzeichen verwendet werden, um die Extraktion zu stoppen. also warum willst du nach Leerzeichen im Wort suchen, wenn es keine hat? –

Antwort

0

Sie jedes Wort hinzufügen könnten Sie zu einem std :: vector lesen, dann könnten Sie eine for-Schleife verwenden sie in der Art und Weise zu verwenden, die Sie beschrieben. Der folgende Code ist ein Beispiel für etwas, das Sie

vector<string> words; 
    string word = ""; 
    ifstream infile("words.txt", ios::in); 

    while (infile >> word) 
    { 
    /* 
    you can process each word here like removing commas, periods 
    and such(if that is in fact what you want) before you add 
    them to the vector 
    */ 
    words.push_back(word); 
    } 

    string phrase = ""; 

    for (int k = 0; k < words.size(); k++) 
    { 
    phrase += " " + words[k]; 
    cout << phrase << endl; 
    } 

Im Beispiel tun konnte, ich nehme an, Sie werden die Worte in den Sätzen wollen Raum

Verwandte Themen