Sonderzeichen entf. und Klein in Großbuchstaben



  • Hallo!

    Ein Teil unserer Aufgabe ist es, einen String einzulesen und in diesem dann alle Sonderzeichen sowie Leerzeichen zu entfernen und dann alle Kleinbuchstaben in Großbuchstaben zu verwandeln.

    Den String lese ich so ein:

    char klartext[101];
         printf("Geben Sie nun Ihren Text ein (max. 100Zeichen):");
         fgets(klartext, 101, stdin);
    

    Um die Sonderzeichen zu entfernen, habe ich noch keine Funktion gefunden.
    Für die zweite Aufgabe bin ich auf "strupr" gestoßen.
    Allerdings kriege ich damit Probleme, wenn ich folgendes tue:

    char codierung[101];
    codierung = strupr(klartext);
    

    Fehler:
    48 C:\Dev-Cpp\project\main.c incompatible types in assignment

    Was mache ich hier falsch und wie löse ich das erste Problem möglichst geschickt und fix? 🙂

    Dankeschön!



  • eine Funktion erwartet einen Zeiger auf char, also

    char* codi;
    char codierung[101];
    codi = codierung // oder: codi = &codierung[0];
    codierung = strupr(klartext);
    

    😉



  • Sorry!

    char* codi;
    char codierung[101];
    codi = codierung // oder: codi = &codierung[0];
    codi = strupr(klartext);
    

    😞



  • strupr ist erstens keine Standard-C-Funktion, weswegen sie für die Aufgabenstellung evtl. nicht brauchbar ist. Zweitens modifiziert strupr sein Argument und gibt einen Zeiger darauf zurück. Extra einen Zeiger dafür zu definieren ist nicht sinnvoll.

    Da du ohnehin noch einige zusätzliche Checks machen musst, empfehle ich die Lektüre der gesamten is*-Funktionen (man: isalpha, ...), sowie man: toupper.



  • hallo, danke euch beiden!
    Ich habs geschafft.
    ich habe jetzt einfach so gemacht:

    strupr(klartext)
    

    Das scheint für meine Zwecke zu reichen erstmal.
    Das mit den Sonderzeichen funktioniert auch.

    Ich habe nun vielmehr das Problem, dass mein Programm manchmal Zeichen einfach an mein Array anhängt, die eigentlich gar nicht da sein dürften!

    Ich hoffe dieser Teil reicht, um den Fehler zu identifizieren:

    printf("Geben Sie nun Ihren Text ein (max. 100 Zeichen):");
         fgets(klartext, 101, stdin);
    _________________
    
         /*Leerzeichen entfernen*/     
         char temp[101];  
         int i=0;
         int j=0;
         while(klartext[i] != '\0')
         {
                if(klartext[i] != ' ' ) {    temp[j] = klartext[i]; j++; }           
                 i++;          
         }
         strupr(temp); 
         /*Sonderzeichen löschen*/
         i=0; j=0;
         int sonderzeichen;
         while(temp[i] != '\0')
         {             
              sonderzeichen = zuordnung_bz(temp[i]);
              if(sonderzeichen != -1) {   codierung[j] = temp[i]; j++; }      
              i++;         
         }
    

    codierung ist ein globaler Array, char [101]. zuordnung_bz ist eine funktion, die eine große Switch Anweisung enthält, die Buchstaben auf Zahlen abbildet.

    Wenn ich jetzt in klartext folgendes speicher: "Dieser Text soll verschluesselt werden." Dann kommt als codierung raus "DIESERTEXTSOLLVERSCHLUESSELTWERDENFGVHPU"

    Keine Ahnung wo der die letzte, fetten, Zeichen hernimmt.
    Hat jemand ne Idee? (ich hoffe der angegebene Code reicht aus).

    aRo



  • Das Problem dürfte sein, dass temp nirgendwo nullterminiert wird.



  • hmm...ich bin mir nicht ganz sicher, ob ich verstehe, was das bedeutet.
    Ich habe mal ein bisschen gesucht, und bin auf folgenden Thread gestoßen:

    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1372964.html

    Aber ich glaube, dass ist nicht ganz das, was du meinst, oder?
    Was genau bedeutet "nullterminiert" und wie mache ich es richtig?

    Danke dir und eine gute Nacht!


Anmelden zum Antworten