Inhalt von char s umgekehrt in char z speichern



  • Hallo zusammen!

    Ich müßte den Inhalt von

    char s[24] = Suppenkessel;

    umgekehrt in

    char z[24];

    speichern und char z ausgeben.

    ---------------------------------

    Ergebnis: char z: lessekneppuS

    Welche Möglichkeiten gibt es?

    Danke

    Chris





  • Danke.

    Wie soll ich den Code:

    #include <algorithm>
    iterator reverse_copy( iterator start, iterator end, iterator result );

    hier einfügen:

    #include <iostream>

    int main()

    {
    int index = 3;

    char s[24] = "Bubbelmaul";
    char z[24];

    strcpy(z, s);

    charps = s;
    char
    pz = z;

    std::cout <<"Char *ps: " << ps <<"\n";
    std::cout <<"Char *pz: " << pz;

    return 0;

    }

    Grüße

    Chris



  • evtl. so

    #include <iostream>
    #include <algorithm>
    
    int main()
    {
    char s[24] = "Bubbelmaul";
    char z[24];
    reverse_copy( s, s+strlen(s), z ); 
    
    std::cout <<"Char *ps: " << s <<"\n";
    std::cout <<"Char *pz: " << z;
    
    return 0;
    
    }
    


  • Folgende Fehlermeldung:

    E2268 Aufruf der undefinierten Funktion 'reverse_copy' in Funktion main() in Zeile 8

    Grüße

    Chris



  • std::reverse_copy(...
    


  • Vielen Dank an

    Braunstein und Artchi.

    Jetzt noch 2 letzte Fragen (Sorry):

    1. Warum wird das "@" mit ausgegeben?

    Out:
    Char *ps: Bubbelmaul

    Char *pz: luamlebbuB@

    1. Könnte ich bitte eine kurze Erklärung bekommen?
      Ich verstehe den Ausdruck: -->s+strlen(s)<-- nicht.
      OK: s ist char s - aber +strlen(s)?

    Danke

    Chris



  • chrbusch schrieb:

    Vielen Dank an

    Braunstein und Artchi.

    Jetzt noch 2 letzte Fragen (Sorry):

    1. Warum wird das "@" mit ausgegeben?

    Out:
    Char *ps: Bubbelmaul

    Char *pz: luamlebbuB@

    1. Könnte ich bitte eine kurze Erklärung bekommen?
      Ich verstehe den Ausdruck: -->s+strlen(s)<-- nicht.
      OK: s ist char s - aber +strlen(s)?

    Danke

    Chris

    1. Weil das was da oben steht falsch ist.
    2. Mach es lieber so wie ihr es gelernt habt und ohne STL. Ich bin mir sicher das ist nicht die geforderte Variante. Du brauchst eine Funktion void reversen(const char* in, char* out, unsigned max);


  • chrbusch schrieb:

    1. Warum wird das "@" mit ausgegeben?

    Weil die Nullterminierung des Strings fehlt. Folgendermaßen kann man sie hinzufügen:

    pz[strlen(ps)] = '\0';
    

    Prinzipiell müsste es auch reichen, einfach ein Zeichen mehr zu kopieren, das klappt bei mir aber komischerweise nicht.

    1. Könnte ich bitte eine kurze Erklärung bekommen?
      Ich verstehe den Ausdruck: -->s+strlen(s)<-- nicht.
      OK: s ist char s - aber +strlen(s)?

    Das ist ein Zeiger hinter das letzte Zeichen des Strings. 'reverse_copy' benötigt einen Bereich zum Kopieren, also einen Start-Zeiger und einen End-Zeiger. Es kopiert dann den Bereich vom Start bis vor das Ende.



  • Konrad Rudolph schrieb:

    Prinzipiell müsste es auch reichen, einfach ein Zeichen mehr zu kopieren, das klappt bei mir aber komischerweise nicht.

    Würde dann nicht das Nullbyte an erster Stelle stehen?;)



  • LordJaxom schrieb:

    Konrad Rudolph schrieb:

    Prinzipiell müsste es auch reichen, einfach ein Zeichen mehr zu kopieren, das klappt bei mir aber komischerweise nicht.

    Würde dann nicht das Nullbyte an erster Stelle stehen?;)

    Ja, dieser Gedanke erklärt so einiges. 😉



  • oder so:

    void rev_string (char *in, char *out)
    {
       char *p = out + strlen(in);
       *p = 0;
       while (p-out) 
          *--p = *in++;
    }
    

    😉 :xmas2:



  • LordJaxom schrieb:

    Konrad Rudolph schrieb:

    Prinzipiell müsste es auch reichen, einfach ein Zeichen mehr zu kopieren, das klappt bei mir aber komischerweise nicht.

    Würde dann nicht das Nullbyte an erster Stelle stehen?;)

    Hähä, habe mich auch gewundert. *klatsch an den kopf* Ja ja, die C-Style Strings sind der Hammer. 😃


  • Mod

    nt


Anmelden zum Antworten