Bestimmte Buchstaben als String einlesen



  • Hey, ich bin noch ein C++- Anfänger und möchte nun einen Automaten erstellen, der einen String einliest. Dabei soll als letzter Buchstabe ein 'z' eingegeben werden. Ich habe schon mehrere Tage rumprobiert und es klappt nicht. Vielleicht kann mir jemand Tipps geben 🙂
    Hier mein momentaner Code.

    #include <iostream>
    
    using namespace std;
    
    class buchstaben
    {
        //Attribute
        string eingabe[5];
        bool ende;
        int laengeEingabe;
    
        //Methoden
    public:
        void init();
        int Eingabe();
        int letzterBuchstabe();
    };
    
    void buchstaben::init()
    {
        eingabe[5] = ende;
    }
    
    int buchstaben::Eingabe()
    {
        //Eingabe und Überprüfung über den ASCII- Code ob letzter Buchstabe ein z ist
        buchstaben *text= new buchstaben;
        cin >> eingabe[1];
        cin >> eingabe[2];
        cin >> eingabe[3];
        cin >> eingabe[4];
        cin >> eingabe[5];
    
        int laengeEingabe;
        laengeEingabe = eingabe[5].length();
    
        //Ausgabe der ASCII- Werte
        for(int index = 0; index < laengeEingabe; index++)
            cout << static_cast<int>(ende);
    
            //Vergleich des letzten Buchstabens mit den ASCII- Werten für z und Z
        if((ende == 90)||(ende == 122))
            ende = true;
            cout << "klappt";
    
    }
    
    int main()
    {
        buchstaben *text= new buchstaben;
        string eingabe[5];
    
        cout << "Gib vier beliebige Buchstaben und ein abschliessendes 'z' ein: " << endl;
        text->Eingabe();
    
        return 0;
    
    }
     
    


  • Puh, da ist aber noch einiges im Argen...

    • ein Array der Länge N (bei dir 5) hat Indizes von 0 bis (N-1), d.h. bei dir 0 - 4. Du hast somit bei Zugriff auf Index 5 bei dir undefiniertes Verhalten (UB)!
    • du sagt, du möchtest einen String einlesen, fragst aber 5 ab
    • die Verwendung deiner bool-Variablen ende ist auch sehr merkwürdig (Zuweisung an String, Abfrage auf ASCII-Wert)...
    • Wozu brauchst du buchstaben *text= new buchstaben; innerhalb der Eingabe()-Klassenfunktion?

    Du kannst einfach einen String einlesen lassen und dann den letzten Buchstaben prüfen (evtl. noch die Länge abprüfen, damit nur genau 5 Buchstaben eingegeben werden):

    string eingabe;
    cin >> eingabe;
    
    if (eingabe.length() == 5)
      if (eingabe[4] == `z`|| eingabe[4] == `Z`)
        // Eingabe akzeptiert
    


  • Besorge dir ein anständiges Buch, wenn du wirklich C++ lernen möchtest. Dein Lernmaterial scheint nicht brauchbar zu sein. Da wirst du sehr schnell die Lust verlieren.



  • @th69
    Super, vielen vielen Dank 🙂 🙂 auch für die Erklärungen. Jetzt funktionierts!
    Ich merke da war wirklich noch einiges im Argen🙈
    Das buchstaben *text= new buchstaben; war noch von den vorherigen Versuchen, hatte ich vergessen raus zu löschen.



  • @manni66
    Hey, danke für die Antwort, hast du eine Empfehlung für ein gutes C++ - Buch? 🙂



  • @gast567 sagte in Bestimmte Buchstaben als String einlesen:

    @manni66
    Hey, danke für die Antwort, hast du eine Empfehlung für ein gutes C++ - Buch? 🙂

    Nein, nicht aus persönlicher Erfahrung. Aber in der Linkliste wirst du hoffentlich fündig.



  • @gast567

    Der C++-Programmierer von Ulrich Breymann (Hanser) kann ich empfehlen. Aktuell ist glaub die 5. Auflage. Aktuell für C++17.

    cu