2 Strings vergleichen!
-
Hallo liebe Community,
ich soll 2 Strings miteinander vergleichen, jedoch dabei keine Bibliotheksfunktion wie z.B "strcmp" verwenden!
Vorgeben ist nur : int equal (char x[], char y[])
Kann mir vielleicht jemand helfen
Mit freundlichen Grüßen
-
int equal(char *x, char *y) { while(*x++ != '\0' && *y++ != '\0') { if(*x != *y) return 0; } if(*x != *y) /* Strings unterschiedlich lang */ return 1; /* Ich weiß nicht was man hier korrekter Weise zurückgeben muss */ return 1; }
-
hey,
*x = pointer oder eine referenz ?
und /0 ist das Nullbyte richtig ?
Vielen Dank für deine Mühe
-
retrogott schrieb:
*x = pointer oder eine referenz?
*x
ist die Dereferenzierung vonx
retrogott schrieb:
/0 ist das Nullbyte richtig?
/0
ist ein Slash und eine Null.Du plenkst.
int equal( char const* x, char const* y ) { while( *x++ == *y++ ) if ( !*x ) return TRUE; return FALSE; }
-
Swordfish schrieb:
retrogott schrieb:
*x = pointer oder eine referenz?
int equal( char const* x, char const* y ) { while( *x++ == *y++ ) if ( !*x ) return TRUE; return FALSE; }
Und wenn der String y länger ist als x? Oder andersherum?
-
Dann ist
*x++ == *y++
false
-
kann ich das auch so schreiben ?
int equal(char x[], char y[]) { int i = 0; while(x[i] != '\0' && y[i] != '\0') { if(x[i] != y[i]) return 0; } if(x[i] != y[i]) return 1; return 1; }
-
Dann kommt bei *x++ == *y++ irgendwann false raus.
-
Hab noch was probiert sollte richtig sein!
int equal(char x[], char y[]){ int i = 0; while(x[i] != '\0' && y[i] != '\0') { if(x[i] != y[i]) return 0; /*Keine Gleichheit darum Rückgabewert 0 */ i++; } return 1; /*Gleichheit darum Rückgabewert 1*/ }
-
SG1 schrieb:
Dann kommt bei *x++ == *y++ irgendwann false raus.
Ah stimmt. '\0' != irgendwas nicht '\0'
-
retrogott schrieb:
Hab noch was probiert sollte richtig sein!
int equal(char x[], char y[]){ int i = 0; while(x[i] != '\0' && y[i] != '\0') { if(x[i] != y[i]) return 0; /*Keine Gleichheit darum Rückgabewert 0 */ i++; } return 1; /*Gleichheit darum Rückgabewert 1*/ }
Nein, ist immer noch falsch.
-
Bei einer Funktion wie equal würde ich mich an den Returnwerten von strcmp halten:
- 0 bei Gleichheit
- ein negativer Wert, wenn x<y oder strlen(x) < strlen(y)
- sonst ein positiver Wert
Ich mein ja nur...
-
und weshalb ?!
-
strcmp = soll ich ja gerade nicht benutzen
sonst wär es ja wirklich einfach!
-
Okay, nicht überlegt:
if(!equal(x,y) // Strings sind gleich!
-
Du kannst aber die Funktionalität von strcmp nachprogrammieren.
Und equal würde ich wörtlich nehmen und bei Ungleichheit 0 zurückgeben.
Dann geht sowas:if(equal("Hallo", "Hallo")) puts("Gleich");
-
int equal(char x[], char y[]){ int i = 0; while(x[i] != '\0' && y[i] != '\0') { if(x[i] != y[i]) return 0; /*Keine Gleichheit darum Rückgabewert 0 */ i++; } if(x[i] != y[i]) return 0; /* das hier hat noch gefehlt, falls x und y ungleich lang sind */ return 1; /*Gleichheit darum Rückgabewert 1*/ }
-
DirkB schrieb:
Dann ist
*x++ == *y++
falseNein, nicht wenn bis zur terminierenden 0 bei beim ersten String nur gleiche Zeichen gefunden wurden. Dann ist das Resultat falsch, wenn der 2. String länger als der erste ist. Richtig wird es, wenn der entsprechende Pointer (oder beide) erst nach dem Vergleich auf die 0 erhöht wird.
-
eq schrieb:
DirkB schrieb:
Dann ist
*x++ == *y++
falseNein, nicht wenn bis zur terminierenden 0 bei beim ersten String nur gleiche Zeichen gefunden wurden. Dann ist das Resultat falsch, wenn der 2. String länger als der erste ist. Richtig wird es, wenn der entsprechende Pointer (oder beide) erst nach dem Vergleich auf die 0 erhöht wird.
Kritisch beim zu frühen Inkrementieren des Pointers ist ausserdem der Vergleich von zwei Strings der Länge 0, da hierbei die terminierende 0 übergangen wird.
-
@eq:
Hallo erstmal!
Ich weiß garnicht ob du's wusstest,
aber du redest schwachfug.