Zeichenketten, Zeiger
-
Hallo,
Es geht darum eine Funktion zu schreiben die höchstens n Zeichen der Zeichenkette t an das Ende der Zeichenkette s anhängt. Wenn t weniger als n Zeichen enthält, wird mit '\0' aufgefüllt. Der Parameter s wird als Funktionsergebnis zurückgegeben. Es darf allerdings keine Funktion aus <cstring> verwendet werden. Ich habs mal probiert. Ist wahrscheinlich nicht gerade der effizienteste Ansatz und eben genau darum geht es. Vielleicht könnt ihr mir helfen ein gute Lösung zu finden.
char* strncat(char* s, char* t, int n) { int i=0; while(s[i] != '\0') { i++; } int k=0; int j=i; for(j; j<i+n; j++) { if(t[k] == '\0') { for(int l=j; l<i+n; l++) s[l] = '\0'; return s; } else s[j] = t[k]; k += 1; } s[j+n] = '\0'; return s; }
-
Ist zwar schon ewig her, dass ich mal 'ne strncat Implementierung geschrieben habe, aber glücklicherweise habe ich den Code noch.
char* strncat(char* destination, const char* source, size_t count) { const char* src = source; char* dest = destination; while (*dest != '\0') ++dest; const char* end = src + count; while (src != end && *src != '\0') { *dest = *src; ++src; ++dest; } *dest = '\0'; return destination; } // keine garantie auf korrektheitIst allerdings eine standardkonforme C Implementierung. Dh, das Auffüllen mit '\0' wird nicht gemacht. Kann man aber relativ leicht einbauen.
-
char* strncat(char* s, const char* t, int n) { int i, sn=0; for(;*s != 0;++s,++sn); --s; for(i=0; *t!=0 && i<n; ++i, ++t) *(++s) = *t; do *(++s) = 0; while(++i<n); return s - sn - i + 1; }
-
derb ihr habt den dreh aber raus!