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

  • Mod

    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 letzter initialisierst Du mit LEER - Damit bekommst Du gleich beim ersten Zeichen, bei dem aktueller den Zustand WORT einnimmst einen Uebergang, den Du zaehlen kannst.

    Im weiteren gehst Du jetzt durch die einzelnen Zeichen und setzt aktueller entsprechend auf LEER oder WORT , vergleichst aktueller mit letzter und erhoehst beim entsprechenden Uebergang Dein Ergebnis. Danach setzt du den letzten Zustand auf den aktuellen und gehst zum naechsten Zeichen.

    Lass das bekloppte switch mal kurz aussen vor.



  • Alles klar vielen dank, ich werde versuchen es umzusetzen


  • Mod

    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


Anmelden zum Antworten