2017-01-10 6 views
0

Ich versuche, ein C++ - Programm zu schreiben, in dem die Anzahl der Zeichen in jedem Wort einzeln (nicht nur die Summe aller Zeichen insgesamt) einer Textdatei gezählt wird. Ich habe Probleme, genau in meiner Schleife zu definieren, wann ein Wort beginnt und endet (mit Zeichen). Wie kann ich diese Schleife so umschreiben, dass sie ein Wort erkennt und die Anzahl der Zeichen in die Variable "Wort" einfügt? Hier ist, was ich bisher:C++ Anzahl der Zeichen in jedem Wort einer Textdatei finden

#include <iostream> 
    #include <fstream> 
    #include <string> 
    using namespace std; 
    int main(){ 
    ifstream fin("file.txt"); 
    int word=0; 
    char ch; 
    while(fin && ch!= '.'){ 
    if(ch==' ' || ch=='\n') 
    word++; 

Es ist falsch, weil ein Teil des Textes große Teile der Leerstellen aufweisen kann, die durch diese Schleife als Zeichen in einem Wort gezählt werden würden. Danke für jede Hilfe!

Antwort

1

Denken Sie daran, dass der normale Eingabeoperator >> Leerraum überspringt.

Das bedeutet, Sie können in ein std::string Objekt lesen und den Zähler für jedes solche "Wort" erhöhen.

#include <string> 

using std::string; 

string Sentence = "I'm trying to write a C++ program where the number of characters in each word individually (not just the sum of all characters overall) of a text file is counted."; 

int main() { 

    unsigned WordLength(0); 

    for (auto i = Sentence.begin(); i != Sentence.end(); ++i) { 
     if (isalpha(*i)) 
      ++WordLength; 
    } 

    return 0; 
} 

Natürlich würden Sie sich entscheiden: durch die Verwendung isalpha(ch);

ein Brief ist nur konnte Beispiel 01

0

Sie auch die Wortlänge erhöhen, wenn das aktuelle Zeichen in der Schleife Wenn Sie die Zeichen + 'in C++ oder ' als Teil des Wortes zählen möchten, oder alternativ Logik hinzufügen, um diese Zeichen zu ignorieren. Sie könnten auch isspace(ch) verwenden. Zählt nur, wenn der Buchstabe kein Leerzeichen ist. Aber dann müssen Sie sicherstellen, dass Sie Interpunktion usw. ignorieren. Was Sie tun könnten mit ispunct(ch). Aber Sie würden immer noch Logik müssen kümmern Spezialfälle wie ' oder '+' oder andere Zeichen, die Sie vielleicht zählen möchten oder nicht zählen: D

Beispiel 02:

unsigned WordLength(0); 

for (auto i = Sentence.begin(); i != Sentence.end(); ++i) { 
    if (isspace(*i) || ispunct(*i)) { 
     /// Print length of word then reset 
     WordLength = 0; 
    } 
    else { 
     ++WordLength; 
    } 
} 

Wie auch immer, ich hoffe es hilft! : D

0

Sie können so etwas tun.

Die Textdatei wird Wort für Wort gelesen und in die Zeichenfolge 'temp' kopiert. Wenn Sie nur die Alphabete aller Wörter zählen, müssen Sie nur die Zeichenfolge zählen. Für andere Operationen (für beliebige oder bestimmte Alphabete), können Sie die 'temp' Zeichenfolge überprüfen.

Verwandte Themen