beliebige Zeilen von der Tastatur einlesen und ausgeben wenn das zeichen'@' kommt



  • Hey Leute,

    ich sitzte schhon eine Weile an einem Programm, das meine eingegebenen Buchstaben, bis das Zeichen @ erscheint einlesen und sie anschließend ausgeben soll. Aber es funktioniert einfach nicht.
    Ich hoffe Ihr habt eine Idee.
    Danke.

    Mein Versuch:

    #include <iostream>

    using namespace std;

    int main()
    {
    char buchstaben[100];
    char buchstabenZiffern[27] = "abcdefghijklmnopqrstuvwxyz";
    int zaehler[27];

    for (int k=0; k<26; k++)
    {
    zaehler[k]=0;
    }

    cout << "Bitte geben Sie eine Buchstabenfolge ein: ";
    cin >> buchstaben;

    for(int i=0; buchstaben[i]=='@'; i++)
    {
    for(int j=0; j<26; j++)
    {
    if (buchstaben[i] == buchstabenZiffern[j])
    {
    zaehler[1] = 15;
    }
    if (j == 26)
    {
    cout << "Fehler!" << endl <<

    "In Ihrer Eingabe " << buchstaben << " ist " << buchstaben[i] <<
    " nicht richtig.";
    }
    }
    }

    for(int i=0; i<26; i++)
    {
    if (zaehler[i]>0)
    {
    cout << "Buchstabe " << buchstabenZiffern[i] << " gibt es " << zaehler[i] << " mal" << endl;
    }
    }

    return 0;
    }



  • Wo veränderst du denn zaehler[i ] ?



  • Achja, nimm die Code-Tags für den Code.
    Code mit der Maus markieren und auf den C++-Button unter dem 😞 klicken.
    Nutze die Vorschau.



  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
      char buchstaben[100];
      // dieses buchstabenZiffern Array ... das würde ich nochmal überdenken
      // ob ein Buchstabe innerhalb des Alphabets liegt kannst du auch relativ 
      // einfach überprüfen in dem du sowas hier machst
      // char myLetter = 't';
      // if(myLetter >= 'a' && myLetter <= 'z')
      // { do sth. }
      char buchstabenZiffern[27] = "abcdefghijklmnopqrstuvwxyz";
      int zaehler[27];
    
      for (int k=0; k<26; k++)
      {
        zaehler[k]=0;
      }
    
      cout << "Bitte geben Sie eine Buchstabenfolge ein: ";
      cin >> buchstaben;
    
      for(int i=0; buchstaben[i]=='@'; i++)
      {
        for(int j=0; j<26; j++)
        {
          if (buchstaben[i] == buchstabenZiffern[j])
          {
            // hier hast du dich anscheinend mit den Indezes vertan, bzw. erst
            // gar nicht den Index aus einer der beiden for-Schleifen benutzt, 
            // sondern statt dessen einfach für den Buchstaben b den Zähler auf 
            // 15 gesetzt.
            zaehler[j]++;
          }
          if (j == 26)
          {
            // hier sollte es relativ unmöglich sein reinzukommen, da du die Schleif
            // ja nur bis j<26 laufen lässt ... daher ist das eine sehr unnötige
            // Überprüfung
            cout << "Fehler!" << endl << "In Ihrer Eingabe " << buchstaben << " ist " << buchstaben[i] << " nicht richtig.";
          }
        }
      }
    
      for(int i=0; i<26; i++)
      {
        if (zaehler[i]>0)
        {
          cout << "Buchstabe " << buchstabenZiffern[i] << " gibt es " << zaehler[i] << " mal" << endl;
        }
      }
    
      return 0;
    }
    

    Aber ... was ist denn genau dein Problem? Was funktioniert nicht?
    Ich hab bis jetzt nur mal deinen Quellcode eingerückt und in Code-Tags gepackt, damit die Wahrscheinlichkeit, das jemand anderes deinen Code überfliegt etwas grösser wird.



  • for(int i=0; buchstaben[i]=='@'; i++)
      {
        ...
      }
    

    ist natürlich auch eine Wahnsinns-Bedingung für die Schleife.

    for(int i=0; 
          buchstaben[i]!='@' &&       // Wenn buchstaben[i] == '@' ist soll ja abgebrochen werden und solange es ungleich ist, soll die Schleife weiterlaufen
          strlen(buchstaben) <= i;    // das dient dann dazu, dass wir nicht über die Array Grenze hinweg laufen
          i++)
      {
        ...
      }
    

Anmelden zum Antworten