C Schwierigkeiten beim Vertauschen von 2 Zeichenketten



  • //Schreiben Sie eine Funktion, die 2Zeichenketten vertauscht

    void tausche(char* a, char* b)
    {
    char* help1;
    while(*a || *b)
    {
    *help1=*a;
    *a=*b;
    *b=*help1;
    *a++;
    *b++;
    }
    }

    int main()
    {
    char a[80],b[80];
    printf("\nGeben Sie einen Satz(1) ein:>");
    gets(a);
    printf("\nGeben Sie einen Satz(2) ein:>");
    gets(b);
    tausche(a,b);
    printf("\n\n1.Satz: %s \n\n",a);
    printf("\n\n2.Satz: %s \n\n",b);

    return 0;
    }

    Funktioniert bei mir garnicht, und ich finde den Fehler nicht!



  • OKAY!!!Sorry Leute...
    ...hab den Fehler gefunden.
    help1 darf anscheiend kein zeiger sein. sondern nur char help1;

    Gibt es denn auch ne Möglichkeit, dass irgendwie mit 3Zeigern zu lösen??

    MfG



  • DonMosquito schrieb:

    void tausche(char* a, char* b)
    {
         char* help1;
         while(*a || *b)
             ...
    }
    

    Das ODER könnte Probleme machen, wenn die beiden Speicherbereiche der Strings nicht gleich lang sind. So läuft das nämlich bis zum Ende (Nullbyte) des längeren.

    DonMosquito schrieb:

    Gibt es denn auch ne Möglichkeit, dass irgendwie mit 3Zeigern zu lösen??

    Vielleicht so:

    char a[80] = "die erste";
    char b[80] = "die zweite";
    char *pa = a, *pb = b, *temp;
    
    // jetzt zeigt pa auf "die erste" und pb auf "die zweite"
    
    temp = pa;
    pa = pb;
    pb = temp;
    
    // jetzt sind die ziele der zeiger vertauscht
    

    🙂

    edit: zeile -> ziele



  • Noch was: statt mit gets() einen String vom User zu holen, kannst ihm gleich alles erlauben.
    🙂



  • Die while-Bedingung ist die richtige, sonst würde bei unterschiedlich langen sätzen der evtl. noch bestehende Rest in der alten Zeile stehen.
    NOCHMAL DIE JETZT AKTUELLE FRAGE.
    Ist es möglich mit einen Hilfszeiger diese Problematik zu lösen.
    Anstatt der variable help1;??



  • Musst ja nicht gleich schreien. Ein Zeiger kann dir nicht weiterhelfen, wenn es keinen Ort gibt, auf den er sinnvoll zeigen kann. Wenn du's nicht so gemeint hast wie ich's verstanden hab, musst du's wohl genauer erklären.
    🙂


Log in to reply