Die folgendeWas ist der Fehler in dieser String-Vergleichslogik?
#include <iostream>
unsigned short int stringCompare (char * s1, char * s2)
{
// returns 1 if the character arrays s1 and s2 are equal;
// returns 0 otherwise
while (*s1 && (*s1++ == *s2++));
return (!(*s1) && !(*s2));
}
int main()
{
char str1 [] = "americano";
char str2 [] = "americana";
std::cout << stringCompare(str1,str2);
return 0;
}
druckt 1
, meine Funktion Logik falsch ist Bedeutung. Ich würde gerne verstehen warum. Lassen Sie mich meine Logik erklären:
while (*s1 && (*s1++ == *s2++))
gleichzeitig Zeiger s1
und s2
so lange erhöht, wie s1 ungleich '\0'
und der Wert s1
Punkte ist, ist der gleiche wie der Wert s2
Punkte. Es sollte eine kürzere Art des Schreibens
while (*s1 && *s2)
{
if (*s1 != *s2) break;
++s1; ++s2;
}
sein und verlässt sich auf ausgefallene Operator Vorrang, um es zu verkürzen.
Die Anweisung
return (!(*s1) && !(*s2))
bedeutet
"If s1 and s2 are both the null character, return true; otherwise return false"
, weil, wenn die Zeichenkette gleich sind, dann s1
und s2
werden sowohl die Null-Zeichen nach der while
Schleife sein.
Wo bin ich falsch?
Haben Sie überlegt, einfach durch den Algorithmus zu gehen? Sie werden sehr schnell das Problem finden ... –