Funktion strcat selbst schreiben
-
Ja ne, erklär' mir bitte Deinen Gedankengang bei
@bruecksy sagte in Funktion strcat selbst schreiben:while (i < v[i])
Mein
strcmp()
:int strcmp(char const *lhs, char const *rhs) { while ((*lhs && *rhs) && (*lhs == *rhs)) // 1) ++lhs, ++rhs; return (char unsigned)*lhs - (char unsigned)*rhs; }
1) läuft solange beide Dingstis noch nicht am Ende sind (
*lhs && *rhs
... kurz für*lhs != '\0' && *rhs != '\0'
) und die Zeichen gleich sind (*lhs == *rhs
).
Danach braucht man bloß noch subtrahieren.
-
@Swordfish
Da v und w gleich viele Komponenten besitzen, ist in v[5] und w[5] die binäre Null gespeichert. Die ersten vier Komponenten werden bezüglich der lexikographischen Ordnung miteinander verglichen. In diesem Beispiel wird 0 ausgegeben, da sich die Komponenten nicht voneinander unterscheiden
-
@bruecksy Was hat denn der Index mit dem Zeichen zu tun? Du vergleichst
i < v[i]
...@bruecksy sagte in Funktion strcat selbst schreiben:
Da v und w gleich viele Komponenten besitzen
Das hat deine Funktion nicht zu interessieren. Die muss für ALLE MÖGLICHEN Eingaben passen.
Nur zur Erinnerung:
Compares two null-terminated byte strings lexicographically.
The sign of the result is the sign of the difference between the values of the first pair of characters (both interpreted as
unsigned char
) that differ in the strings being compared.The behavior is undefined if lhs or rhs are not pointers to null-terminated byte strings.
Also: Stelle finden an der sich die beiden Strings unterscheiden oder zuende sind und dann subtrahieren. Fertig.
-
@bruecksy sagte in Funktion strcat selbst schreiben:
in v[5] und w[5] die binäre Null gespeichert. Die ersten vier Komponenten
Das fällt mir erst jetzt auf.
v[5]
(bzw.w[5]
) ist das 6te Arrayelement. Davor sind fünf andere. Arrays beginnen bei0
.
-
@Swordfish klar, das ist richtig, dankeschön.