Importer:Error:WasEmpty
-
Guten Tag,
kann mir vielleicht jemand sagen wie ich folgendes in c++ umsetze?
Die Analyse kann wie folgt durchgeführt werden: Das augenblicklich betrachtete Zeichen gehört ent-
weder zu einem Wort oder zu einem Zwischenraum (Folge von Leerzeichen und/oder Tabulatoren).
Jeder der beiden Zustände wird in einer Zustandsvariablen zustand codiert, zum Beispiel LEER:
zustand=0, WORT: zustand=1. In jedem Schritt (das heißt beim jeweils nächsten zu betrachtenden
Zeichen) wird überprüft, ob eine Zustandsänderung stattfindet. Beim Zustands-
übergang LEER --> WORT wird der Wortzähler erhöht.
-
ungetestet
#include <cctype> bool get_state(char charakter) { return !std::isspace(charakter); } int main() { unsigned word_count = 0; bool last_state = false; for(/* hier dein iterator der über deinen container geht */) { if(last_state == false && get_state(*iter) == true) word_count++ last_state = get_state(*iter) } }
-
Schonmal vielen dank für deine antwort, ich bin noch anfänger und blicke da noch nicht wirklich durch, ich habe noch vergessen zu erwähnen dass ich das zusätzlich mit einer switch-Anweisung lösen soll. Kann man den code noch vereinfachter darstellen?
-
Da das offensichtlich eine Hausaufgabe o.ae. ist, waere es angebracht, Deine bisherigen Loesungsansaetze zu posten.
Du sollst ja was lernen und nicht andere Deine Hausaufgaben machen lassen.
-
Zurzeit bin ich soweit gekommen aber hänge bisher an der stelle
#include <iomanip> #include <iostream> #include <cctype> using namespace std; int main ( ) { int maxstring = 256; char text[maxstring]; char c; int i; int wort = 0; int zustand = 0; cout << "***** Wörter zählen *****\n"; cout << "Geben Sie eine Textzeile ein: "; i = 0; while ( ( c = cin.get() ) != '\n' ) { text[i] = c; i = i+1; } text[i] = '\0'; cout << "Der eingegebene Text lautet '" << text << "'\n"; for ( i = 0; text[i] != '\0'; i += 1 ) { if (zustand != 1) wort = wort + 1; if ( isalpha( text[i] ) ) zustand = 1; if (isspace ( text[i] ) ) zustand = 0; } cout << setw(6) << wort << " Wörter\n"; return 0; }
-
i = 0; while ( ( c = cin.get() ) != '\n' ) { text[i] = c; i = i+1; } text[i] = '\0';Habt ihr das so gelernt oder hast du dir das selber ausgedacht?
-
Das haben wir so gelernt
-
OK.
Du willst ja eigentlich die Uebergaenge LEER->WORT zaehlen.
Dazu brauchst Du natuerlich den aktuellen Zustand und den letzten Zustand.
Ziemlich genau, wie in der Aufgabe beschrieben koenntest Du das so implementieren:const int WORT=0; const int LEER=1; int letzter=LEER, aktueller;Den Zustand
letzterinitialisierst Du mit LEER - Damit bekommst Du gleich beim ersten Zeichen, bei demaktuellerden Zustand WORT einnimmst einen Uebergang, den Du zaehlen kannst.Im weiteren gehst Du jetzt durch die einzelnen Zeichen und setzt
aktuellerentsprechend aufLEERoderWORT, vergleichstaktuellermitletzterund erhoehst beim entsprechenden Uebergang Dein Ergebnis. Danach setzt du den letzten Zustand auf den aktuellen und gehst zum naechsten Zeichen.Lass das bekloppte
switchmal kurz aussen vor.
-
Alles klar vielen dank, ich werde versuchen es umzusetzen
-
Mirofire schrieb:
Das haben wir so gelernt
Bisher kannte ich hier vom Forum folgende Kategorien von C++-Lehrern:
1. Lehrer, die C++ lehren.
2. Lehrer, die C mit Klassen lehren
3. Lehrer, die C mit cin und cout lehren (leider die häufigste Kategorie)Für deinen Lehrer braucht es was neues:
4. Lehrer, die Assembler mit C-Syntax lehren.Ich fürchte, die harte Wahrheit ist, dass du nach Abschluss des Kurses gar nichts über C++ gelernt haben wirst. Nicht wegen dir, sondern wegen dem Lehrer. Das erkennst du schon da dran, dass du von dem (eigentlich recht anfängerfreundlichem) Vorschlag von asdfasf kein Wort verstanden hast.
-
Das hört sich nicht gut an, dann werde ich ja noch viel spaß im studium haben