007
16.04.2009, 23:39 Uhr
0xdeadbeef
Gott (Operator)
|
C-Strings erlauben unter Umständen (abhängig vom gewünschten Interface) eine Möglichkeit, das in einem Pass zu erledigen (also ohne strlen). Es ist eine etwas holprige Angelegenheit, weil man die Länge des Strings nicht von vorneherein kennt, aber man ist in C ja nicht gezwungen, den Anfang des Buffers zu benutzen. Die Idee ist folgende:
C++: |
#include <stdio.h>
char *strrev(char *dest, size_t n, char const *src) { dest += n - 1; for(*dest-- = 0; *src; --dest, ++src) *dest = *src; return dest + 1; }
int main(void) { char buf1[256] = "Hallo, Welt"; char buf2[256];
char *rev = strrev(buf2, 256, buf1); puts(rev);
return 0; }
|
Jetzt ist buf2 nach Aufruf von strrev nicht selbst der umgedrehte String, aber das ist ja unter Umständen auch gar nicht notwendig. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 16.04.2009 um 23:42 Uhr von 0xdeadbeef editiert. |