Thread View: de.comp.lang.c++
3 messages
3 total messages
Started by Steffen Zimmert
Sat, 09 Mar 1996 13:53
Problem mit cat()
Author: Steffen Zimmert
Date: Sat, 09 Mar 1996 13:53
Date: Sat, 09 Mar 1996 13:53
45 lines
1699 bytes
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()
Author: Ralf W. Stephan
Date: Mon, 11 Mar 1996 08:36
Date: Mon, 11 Mar 1996 08:36
15 lines
944 bytes
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()
Author: Karl-Heinz Krause
Date: Mon, 11 Mar 1996 17:03
Date: Mon, 11 Mar 1996 17:03
40 lines
1585 bytes
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