🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
3 messages
3 total messages Started by Steffen Zimmert Sat, 09 Mar 1996 13:53
Problem mit cat()
#1800
Author: Steffen Zimmert
Date: Sat, 09 Mar 1996 13:53
45 lines
1699 bytes
Hallo!

Als kleine Übungsaufgabe im C++-Standardwerk "Die
C++-Programmiersprache" findet sich auch die Aufgabe, die Funktion
`cat()` zum Aneinanderhängen zweier Strings zu schreiben. Der
daraus resultierende String soll mit `new` angelegt werden.

Meine Lösung (funktioniert):
char* cat(const char* s1, const char* s2)
{
    int l1  = strlen(s1);
    char* r = new char[l1+strlen(s2)+1];


        strcpy(r,s1);

        int i = l1;   (*)

        while(r[i++] = *s2++);

        return r;
}


Nun dachte ich mir, es könnte auch noch kürzer gehen und wollte die
letzten Zeilen so schreiben:

(*) r += l1;    <- Setze den Pointer auf das letzte Zeichen

    while(*r++ = *s2++);

    return r;


Leider will das irgendwie nicht klappen.. :-(
Anscheinend klappt r += l1 nicht, aber wenn der Pointer r am Anfang
auf Index 0 zeigt und ich ihn um l1 erhöhe, dann müsste er doch auf
das terminierende `\0`-Zeichen von r zeigen, oder?

Kann mir jemand erklären, was ich wieder falsch mache....

        MfG,    Steffen

|| S.Zimmert@AME.osn.de  --  snzimmer@cip.informatik.uni-erlangen.de
|| PGP-Fingerprint = A0 4D B5 89 4F B1 07 91 AF C2 A5 A7 84 19 8E 9F
Re: Problem mit cat()
#1809
Author: Ralf W. Stephan
Date: Mon, 11 Mar 1996 08:36
15 lines
944 bytes
Steffen Zimmert writes:
> Leider will das irgendwie nicht klappen.. :-(
> Anscheinend klappt r += l1 nicht, aber wenn der Pointer r am Anfang
> auf Index 0 zeigt und ich ihn um l1 erhöhe, dann müsste er doch auf
> das terminierende `\0`-Zeichen von r zeigen, oder?

Das macht er ja auch.  Nur gibst Du mit 'return r;' dann nicht
den alten Pointer (auf den Anfang), sondern den geänderten zurück.
Verwende also einen zweiten Pointer, mit dem Du die Arbeit machst
oder nimm doch einfach strcat(), anstatt das selber zu schreiben.


ralf
--
PGP: 1024/0xA713ECE9 2047/0xC8E605F5
Re: Problem mit cat()
#1814
Author: Karl-Heinz Krause
Date: Mon, 11 Mar 1996 17:03
40 lines
1585 bytes
Am 9. März 96 schrieb Steffen Zimmert (S.ZIMMERT@AME.osn.de):

> Nun dachte ich mir, es könnte auch noch kürzer gehen und wollte die
> letzten Zeilen so schreiben:

> (*) r += l1;    <- Setze den Pointer auf das letzte Zeichen

>     while(*r++ = *s2++);

>     return r;


> Leider will das irgendwie nicht klappen.. :-(
> Anscheinend klappt r += l1 nicht, aber wenn der Pointer r am Anfang
> auf Index 0 zeigt und ich ihn um l1 erhöhe, dann müsste er doch auf
> das terminierende `\0`-Zeichen von r zeigen, oder?

Da hast Du recht.

> Kann mir jemand erklären, was ich wieder falsch mache....

Der Knackpunkt ist das 'return r'. Hier zeigt 'r' nicht mehr auf den
Anfang des erzeugten Strings, da Du es in der Schleife verändert hast.

Wenn es darum geht, ein möglichst kurzes Progrämmchen zu schreiben, dann
würde ich es so machen:

char* cat(const char* s1, const char* s2)
{
    int ll = strlen(s1);
    char* r = new char[ll+strlen(s2)+1];

    strcpy (r, s1);
    strcpy (r+ll, s2);
    return r;
}



Karl-Heinz Krause
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads