Reverse Print



  • hallo und einen schönen abend,

    Ich wollte euch fragen wie ich ein C-Programm schreiben kann, welches die strings verkehrt ausgibt, d.h. hallo=ollah.

    ich weiss das ich einen array of char dafür brauche.

    2. es soll so modifziert werden, das palindrome erkannt werden, z.B.
    =anna und otto= und als meldung "palindrom" erscheint.

    kann mir jmd da helfen?



  • vielleicht hilft das als anregung

    void reverse(char* str){
       char* links=str;
       char* rechts=str+stelen(str)-1;
       while(links<rechts){
          char tmp=*links;
          *links=*rechts;
          *rechts=tmp;
       }
    }
    bool isPalindrome(char* str){
       char* links=str;
       char* rechts=str+stelen(str)-1;
       while(links<rechts)
          if(*links!=*rechts)
             return false;
       return true;
    }
    


  • Ist das der gesamte code?wenn nein was muss ich dazu proggen?

    Wie funktioniert der code?(muss ja wissen wies geht :-))



  • was siehst du denn im code und was bedeutet es?



  • 1. eine funktion die einen char wert zurück gibt....

    char* links=str;
       char* rechts=str+stelen(str)-1;
    

    mit diesen beiden zeilen kann ich leider nichts anfangen.

    while(links<rechts){
          char tmp=*links;
          *links=*rechts;
          *rechts=tmp;
       }
    

    ist eine schleife in der die sortierung vorgenommen wird...
    ansonten weiss ich nicht was jeder schritt bedeutet und was jeder befehl macht.

    könnt ihr mir vielleicht das irgendwie beschreiben?

    char tmp=*links;
    

    Z.B was diese zeile macht und die befehel davon?

    ich danke euch!



  • void reverse(char* str){              // dreht die Zeichenkette in str um
       char* links=str;                   // setze links  auf das erste Zeichen in str ( (links = str) == (links = &str[0]) )
       char* rechts=str+stelen(str)-1;    // setze rechts auf das letzte Zeichen in str ( str + anzDerZeichen - 1 )
                                          //  -1 zählt uns die anschließende '\0' weg, die brauchen wir nicht "umdrehen"
       while(links<rechts){               // dann solange links und rechts sich nur noch um 1 unterscheiden
          char tmp=*links;                // Zeichen an Speicherposition links sichern,
          *links=*rechts;                 // rechts nach links
          *rechts=tmp;                    // den zuvor gesicherten Wert nach rechts
          ++links;                        // hat Volkard vergessen: (nunja, wie ich Volkard kenn hat er's bestimmt nicht "vergessen" ;)
          --rechts;                       // links und rechts "sich näherkommen lassen"
       }                                  // und schon ist str umgedreht;
    }
    bool isPalindrome(char* str){
       char* links=str;                   // s. O.
       char* rechts=str+stelen(str)-1;    // s. O.
       while(links<rechts)                // s. O.
          if( *(links++) != *(rechts--) ) // vergleiche linkes und rechtes Zeichen und inkrementiere bzw. dekrementiere danach.
             return false;                // sind links und rechts unterschiedlich ist's kein Pallindrom
       return true;                       // kommen wir bis daher, wissen wir, daß jedes linke Zeichen seinem analogen rechten Zeichen entspricht.
    }
    


  • ich danke euch...das hat mir sehr geholfen...

    was müsste ich nur noch am code machen?? kann ja ned alles sein oder?

    die ein und ausgabe oder? oder noch was anderes??



  • konkret würden mich noch interessieren:

    was macht/ist

    char*
    

    was macht/ist?

    tmp
    

    was die variablen machen/sind?

    str+stelen
    

    Muss diesen Code auch freunden erklären können daher will ichs genauer wissen. Ansonsten TOP erklärt.
    Dann habe ich denke ich das Programm dank euch verstanden und habe DANKE EUCH keine weiteren Fragen mehr.

    mfg sinalco



  • sinalco schrieb:

    konkret würden mich noch interessieren:

    was macht/ist

    char*
    

    ein Datentyp: Zeiger auf ein char(array) - so werden in C Strings behandelt

    was macht/ist?

    tmp
    

    ein Variablenname (dient im obigen Code zur Speicherung von Zwischenwerten)

    was die variablen machen/sind?

    str+stelen
    

    str ist der übergebene Parameter (und zeigt auf die Original-Zeichenkette), strlen() (das "e" dürfte ein Tippfehler sein) ist eine Funktion, die die Länge des Strings ermittelt.

    Und str+strlen(str) ergibt einen Zeiger, der "strlen(str)" Zeichen hinter den Stringanfang zeigt - also auf das '\0', das das Stringende markiert.





  • ich danke allen...habs 🙂
    wunderbar von euch 👍


Anmelden zum Antworten