Fehler in nem Programm mit einem Textarray?



  • Hallo!

    Ich habe folgendes Programm, was in gewisser Art und Weise läuft aber sobald ein Leerzeichen in dem Satz vorkommt, steht im ausgegebenen Array nur das Wort bis zum Leerzeichen...

    Würde mich über eine Hilfe freuen 🙂

    /* ----------------------------------------------------- */
    
    // DerNeueAndy ~*~ TEXTARRAY_TO_UPPERCASE ~*~ 2007-02-06 //
    
    /* ----------------------------------------------------- */
    
    #include <iostream.h>
    #include <conio.h>
    #include <stdio.h>
    
    #define ANZAHL 20
    
    int main()
    
    {
     int i=0;
     char wort[ANZAHL],c;
    
     cout << "Gebe einen Satz ein (20 Zeichen maximal): ";
     cin >> wort;
    
     for (i=0;i<ANZAHL;i++)
        {
         if ( wort[i] >= 'a' && wort[i] <= 'z' )
          {
           wort[i]=wort[i]-32;
           cout << wort[i];
          }
        }
     getchar();
    }
    

    MfG - Andy 🙂



  • Hallo,

    in Deiner if-Abfrage, werden ja nur die Buchstaben berücksichtigt, wenn da noch Satzzeichen oder andere Zeichen reinsollen, mußt Du sie einfach auch noch dazufügen. Dann müßte es auch mit dem Leerzeichen in der Ausgabe funktioniren.
    Gutes gelingen. 🙂



  • Hallo!

    Danke für die Information 🙂 Aber jetzt habe ich so sehr rumprobiert, dass ich einen totalen Blackout habe...

    Hast du es ausprobiert? Bitte löse es auf... komme nicht drauf 👎 please...

    MfG - Andy 🙂

    EDIT: Das Programm soll hinterher alle Buchstaben Groß ausgeben. daher ja die Zeile "wort[i]=wort[i]-32;" aber das soll ja nicht bei der Leertaste passieren...



  • nutz mal std::string anstelle von char[20] ... und dann std::getline(std::cin, string) anstelle von std::cin ...



  • da meldet er mir fehler in der if-bedingung...

    kann man das nicht mit char machen?

    also ich habe da etwas gefunden... dann habe ich das mal etwas umgesetzt und das klappt! 🙂

    /* ----------------------------------------------------- */
    
    // DerNeueAndy ~*~ TEXTARRAY_TO_UPPERCASE ~*~ 2007-02-06 //
    
    /* ----------------------------------------------------- */
    
    #include <iostream.h>
    #include <conio.h>
    #include <stdio.h>
    
    #define ANZAHL 20
    
    int main()
    
    {
     int i=0;
     char wort[ANZAHL];
    
     cout << "Gebe einen Satz ein (20 Zeichen maximal): ";
     cin.get (wort, ANZAHL);
    
     for (i=0;i<ANZAHL;i++)
      {
       if ( wort[i] >= 'a' && wort[i] <= 'z')
        {
         wort[i]=wort[i]-32;
        }
       cout << wort[i];
      }
     getchar();
    }
    

    kann man auch noch die umlaute anzeigen lassen? weil das geht nicht... bzw wenn man se eingibt bleiben sie klein. d.h. ist ja auch nicht in der if-bedingung! aber wie kann ich denn diese ä, ö und ü dort einfügen und groß werden lassen? würde mich wieder über hilfe freuen 🙂

    MfG - Andy 🙂



  • Hallo Andy!

    Ich kenn mich zwar selber nicht so gut aus, aber ...

    Wenn ich mich richtig erinnere, muss bei cin.get die Größenangabe (ANZAHL) um 1 verringert werden. Da dein char-Array ja maximal 20 Elemente hat und er das 20. Element für die abschließende Nullterminierung (\0) braucht.

    Und sicher kann man es mit char Arrays machen. Aber diese sind doch ziemlich Fehleranfällig. Nachdem ich mich einige Zeit mit den char Arrays geärgert hatte, habe ich mal die string.h ausprobiert und bin sehr zufrieden damit.

    Für ä ö ü musste man glaube ich direk den Hex-wert angeben. Aber das habe ich hier auch nur mal in der FAQ gelesen. Gucke am besten dort nochmal nach.

    Für evtl. Fehler entschuldige ich mich schonmal im Vorraus 😉

    Gruß Spartaner



  • Hi,

    das kann ja gar nicht funktionieren:

    DerNeueAndy schrieb:

    ...

    Gebe
    

    ...

    Das Wort gibt es nicht (höchstens vielleicht als Namen) 😉

    Mein Tipp: Setze "Standardmittel" ein ! string, isalpha und toupper sind Deine Freunde ! 😃

    Gruß,

    Simon2.



  • Spartaner schrieb:

    Und sicher kann man es mit char Arrays machen. Aber diese sind doch ziemlich Fehleranfällig. Nachdem ich mich einige Zeit mit den char Arrays geärgert hatte, habe ich mal die string.h ausprobiert und bin sehr zufrieden damit.

    In der string.h sind aber nur die C-Funktionen zur Arbeit mit char-Arrays 😉 Du meintest sicher die <string>

    @Andy: Bei std::string und getline() bist du nicht mehr auf eine Maximallänge beschränkt. Das bedeutet einerseits, daß du ANZAHL nicht mehr brauchst - und daß du per length() die tatsächliche Länge der Eingabe erfragen kannst:

    string wort;                   //char wort[ANZAHL];
    cout<<"Gib' einen Satz ein: "; //cout << "Gebe einen Satz ein (20 Zeichen maximal): ";
    getline(cin,wort);             //cin.get (wort, ANZAHL);
    
    for(i=0;i<wort.length();++i)   //for (i=0;i<ANZAHL;i++)
    {
      wort[i]=toupper(wort[i]);    //if ( wort[i] >= 'a' && wort[i] <= 'z')
                                   //  wort[i]=wort[i]-32;
      cout << wort[i];
    }
    

    (Edit: Extra für Simon habe ich noch die Ausgabe durch die Grammatik-Kontrolle gejagt :D)



  • CStoll schrieb:

    ...

    Gebe
    

    ...

    Oh Nein ! Nicht Du auch noch ! 😉

    Die Zeile wolltest Du doch sowieso entfernen, oder ?

    Gruß,

    Simon2.



  • Simon2 schrieb:

    CStoll schrieb:

    ...

    Gebe
    

    ...

    Oh Nein ! Nicht Du auch noch ! 😉

    Ich bin nicht für die grammatikalischen Unzulänglichekeiten des OP verantwortlich - deshalb habe ich an seinem Programm auch nur die technischen Aspekte betrachtet.

    (PS: Eventuell solltest du mal estartu fragen, ob sie noch Korrekturleser fürs Magazin braucht :D)



  • CStoll schrieb:

    Simon2 schrieb:

    CStoll schrieb:

    ...

    Gebe
    

    ...

    Oh Nein ! Nicht Du auch noch ! 😉

    Ich bin nicht für die grammatikalischen Unzulänglichekeiten des OP verantwortlich - deshalb habe ich an seinem Programm auch nur die technischen Aspekte betrachtet.

    (PS: Eventuell solltest du mal estartu fragen, ob sie noch Korrekturleser fürs Magazin braucht :D)

    Ahh, besser ...allerdings immer noch ein Apostroph zuviel .... 😃

    Gruß,

    Simon2.


Log in to reply