Pointer vertauschen? Hilfe!



  • Hallo!
    Ich habe folgendes Problem:
    Meine Aufgabenstellung ist folgende:

    Schreiben Sie ein Programm, das einen positiven ganzzahligen Wert n ≥ 6 einliest. Anschließend reservieren Sie Speicher für ein Array TextSammlung von n Pointern auf die folgende Datenstruktur:
    struct TextBlock
    {
    char * Text;
    size_t Laenge;
    };

    Lesen Sie nun n Texte beliebiger Längen ein (Leerzeichen in den Texten sollen erlaubt sein), und befüllen Sie die Datenstruktur entsprechend mit dem Text und seiner Länge (Vergessen Sie nicht, sowohl für den Text als auch für die Struktur selbst Speicher zu allokieren!). Geben Sie dann jeden Text und seine Länge mit cout übersichtlich formatiert aus. Vertauschen Sie im Anschluss die ersten 3 mit den letzten 3 Texten mit Hilfe einer geeigneten Funktion, die in einem eigenen Sourcemodul definiert ist und geben Sie das Ergebnis erneut aus. Achten Sie auf korrekte Definitionen und Deklarationen aller notwendigen Elemente.
    Randbedingungen:

    1. Die Verwendung der C++-Klasse string ist nicht erlaubt.
    2. Verwenden Sie nur new zur Speicherallokation, nicht malloc()!
    3. Vertauschen heißt nicht Kopieren...

    ____

    Ich habe alles geschafft bis auf das Pointer vertauschen am Schluss.
    Könnt ihr mir da vielleicht helfen?
    Da gibt es laut Professor einen eigenen Befehl bzw. Methode, Pointer zu vertauschen.

    Vielleicht kann mir jemand helfen.
    Danke!



  • std::swap



  • Insgesamt hört sich das nach YAIT (yet another incompetent teacher) an.



  • Hey!

    Super danke!

    Hab jetzt ein bisschen gegoogelt und das folgendermaßen versucht:

    eine void Funktion mit swap gemacht:
    void swap (int *r, int *s)
    {
    int *SWAP = r;
    r=s;
    s=SWAP;
    return ;
    }

    bezugnehmend auf die Strukture, die oben gepostet ist:

    wie kann ich das dann aufrufen?

    Meine Struktur lautet folgendermaßen:
    struct TEXTBLOCK
    {
    char *TEXTE;
    int Laenge;
    };

    Aufrufen möchte ich das ganze in einer for-schleife falls möglich:
    for (i=0; i < n; i++)
    {
    swap(&TEXTE[i], &TEXTE[0]);
    cout << "Der " << (i+1) << ". " << "Text lautet: " << neuertext[i].TEXTE<< endl << "und hat folgende Zeichenlaenge " << neuertext[i].Laenge << "." << endl << endl;
    }

    Aber er tauscht einfach nix.



  • void Swap(int i, int k);
    
    ...
    int l = 10, m = 20;
    Swap(l, m);
    

    Beantworte dir mal die Frage, ob das funktioniert würde, und wenn nicht, warum nicht? Und dann übertrag' das auf dein Beispiel.



  • Unter der Annahme, du löst die Aufgabe aus deinem ersten Post, hast du ein Array von Pointern TextSammlung der Länge n.

    std::swap(TextSammlung[0], TextSammlung[n-1]);
    

    vertauscht das erste und das letzte Element.

    Dein zweiter Post scheint mit dem ersten nur lose zusammenzuhängen.


Log in to reply