Klassifizierung nach Eingabe

kokou

Grünschnabel
Hallo hab mal eine frage! Hab ihm forum nicht das gefunden was ich zur Lösung meines Problems brauch und da ich newbie in c++ bin fragich einfach mal.


Also möchte ein Programm wo ich 4 Zeichen eingebe (char) zusammmen ergeben sollen die eine Zeichenkette ergeben. Jetz soll mir das Programm nach der eingabe sagen ob es sich bei der Zeichenkette um eine Zahl(alle 4 zeichen einen Ziffer); ein Wort (entweder alles Großbuschstaben oder Kleinbuchstaben oder der Anfangsbuchstabe Groß und der Rest kleingeschrieben) ; Unwort (d.h ein wort aber nicht wie oben deklariert z.Bsp. suMMe)
und zum schluss Mischmasch (Bsp.: A3a*). kann mir jemand behiflich sein ?

Muss ich für für jedes der 4 zeichen eine variable deklarieren oder reicht es mit einem string?

Und wie bekomem ich dann die Klassifizierung hin? Ich dachte da an einen Switch mit 4 case's aber ich weiß halt nicht wie ich es schaffe das mir das Prog sagt was für eine Kategorei bei der Eingabe gemacht wurde.

Über nette und hilfreiche antworten werd ich mich sehr freuen.
 
Ich würde vorschlagen, du speicherst die Zeichen in einem char[] oder einem nullterminierten String.
Für die Klassifizierung empfehle ich Dir eine einfache Statusmaschine. Du fängst im Status START an; Dann gehst Du die Zeichen einzeln durch und wechselst je nach Zeichenart in einen entsprechenden Status, bis Du am Ende im entsprechenden Status angekommen bist, der Deine Klassifizierung bezeichnet. Am besten zeichnest Du die Statusmaschine erstmal auf Papier auf.
 
So hab das hingekriegt mit dem Klassifiziern. Jetzt hab ich einen string eingefügt wonach ich max. 16 zeichen eingebe und er mir diese eingabe Klassifiziert. Jetzt meine Fragen (code wird anschliesend gepostet)

1.Wie muss ich die for-schleifenbedingungen ändern das er die eingabe richtig erkennt? weil zur Zeit erkennt er die Klassifizierung nicht ich seh den fehler nicht aber ich es mus ja irgednwo da der fehlersein.
Code:
#include <iostream>
#include <string>

using namespace std;

enum StringKategorie {Zahl,Wort,Unwort,Mischmasch};

int main()

{   
    
    
    char inputString[17];
    
    cout << "String eingeben: ";
    // Zeichenkette wird eingegeben und in inputString gespeichert
    cin >> inputString;
    //Flags werden deklariert die je nach eingabe geändert werden
    bool isWord = true;
    bool isUnword = false;
    bool isNumber = true;
    bool isLowerCase = false;
    //schleife die Eingabe durchläuft
    for (int i=0;i>=17;i++)
    
    {//Test ob die Zeichen noch als Wort in Frage kommen und da aktuelle Zeicehn ein Buchstabe ist
        if (isWord && 
             (('A'<= inputString[i] && inputString[i] <= 'Z')
              || ('a'<= inputString[i] && inputString[i]<='z'))
           )
           
            {
                 //Wenn ein kleinbuchstabe auftaucht wird es vermerkt
                 if ( !isLowerCase && ('a'<=inputString[i] && inputString[i]<= 'z'))
                     isLowerCase = true;
                     
                 //Nach einem Kleinbuchstaben darf kein Großbuchstabe stehen
                 //und falls der Zweite Buchstabe ein Großbuchstabe ist darf
                 // kein Kleinbuchstabe kommen, sonst sind die Zeichen ein Unwort
                 
                 if ( (isLowerCase && ('A' <= inputString[i] && inputString[i]<='Z'))
                     ||(isLowerCase && ('A' <= inputString[1] && inputString[1]<='Z'))
                     )
                     isUnword = true;
                     
            }
            else {
                  isWord = false;
                 } 
                 
                 
            // Test ob die Zeichen noch als Zahl in Frage kommen und das 
            //aktuelle Zeichen eine Zahl ist
            
            if ( isNumber && !('0'<=inputString[i] && inputString[i] <= '9' ))
                  isNumber=false;
    }
    
    
    string answer;
    
     if (isWord) 
        
        {
                 if (isUnword)  
                 
                     answer= " ist ein Unwort";
                 
                 else 
                 
                      answer= " ist ein Wort";
        }          
         
         else 
            {
             
              if (isNumber) 
                   answer= " ist eine Zahl";
              else
                   answer= " ist Mischmasch";
                   
             } 
             
          cout << "Die Zeichenkette " << inputString << answer << endl;
         
}


2. möchte ich gerne cin.eof() einfügen aber weiß nicht wie und bis jetz hab ich keine anleitung gefunden die mir den rettenden einfall gebracht hat. soweit ich das verstanden hab mit cin.eof() muss ich es ja mit einer bedingung machen (schleife?!) kann ich es in die for-schleife reinpacken? oder wie realisier ich das am besten?

3. (letzte frage!!)
Wie ma sieht hab ich Enumerationstyp eingefügt. wie kann ich jetz das was in dem typ festgelgt ist benutzen das ist mir nicht ganz klar ich kann es ja nicht als Funktion aufrufen oder? kann ich das was ich in StringKategorie festgelgt hab anstelle der string answer setzen.


danke schonmal für die hilfe
 
Zurück