strcmp selfmade. Fußgesteuerte Schleife? Abbruch nach dem ersten Zeichen
-
Danke für die super Erklärung, gibt ja voll viele möglichkeiten etwas auszudrücken o_O
Habe das nun ausgebessert.
Nehmen wir den Fall, dass beide Variablen gleich sind.
Dann hat str[a] und str2[a] den selben Wert, dh. return 0;
Aber, die Ausgabe funktioniert nicht.
Als ich noch meine Startversion hatte, wo es nach dem 1. Zeichen abgebrochen hat, hat die Ausgabe funktioniert, und ich habe nichts verändert.
-
Also oben frage ich ab ob MyStrCmp 0 ist, wenn ja, soll es 0 ausgeben, funktioniert nicht.
-
Scheppertreiber schrieb:
Nein. Es gibt in C keinen Datentyp "string".
naja, es gibt typedef, #define, z.b. typedef char string;* oder sowas.
Scheppertreiber schrieb:
Was soll bitte eine "binäre Null" sein ?
alle bits sind 0, so ist das wohl gemeint.
c.nub: probier mal ungefähr so:
int MyStrCmp (char *a, char *b) { for(;;) { if (*a != *b) // aktuelles zeichen ungleich? return *a - *b; // irgendwas !=0 zurückgeben else if (*a + *b == 0) // beide am ende? break; // ok, 0 zurückgeben a++; // beide ... b++; // ... eins weiterzählen } return 0; }
^^ ungetestet
-
;fricky schrieb:
c.nub: probier mal ungefähr so:
int MyStrCmp (char *a, char *b) { for(;;) { if (*a != *b) // aktuelles zeichen ungleich? return *a - *b; // irgendwas !=0 zurückgeben else if (*a + *b == 0) // beide am ende? break; // ok, 0 zurückgeben a++; // beide ... b++; // ... eins weiterzählen } return 0; }
^^ ungetestet
Naja, ich habe ja Arrays, dh ich soll das ganze in der while Schleife einfügen?
-
c.nub schrieb:
Naja, ich habe ja Arrays, dh ich soll das ganze in der while Schleife einfügen?
wenn's unbedingt 'while' sein muss, dann mach aus dem 'for(;;)' ein 'while(1)'. aber schau dir meinen code mal an, damit du das prinzip checkst (entweder ungleich oder beide 0), dann kannstes auch anders programmieren.
-
Wow, danke es funktioniert.
Ehrlich, alleine wär ich da nie drauf gekommen.
Die Ausgabe habe ich geändert, funktioniert auch super.
Danke und schönen Abend noch.
Habe sicher bald iwann wieder ne Frage^^
-
c.nub schrieb:
Wow, danke es funktioniert.
Ehrlich, alleine wär ich da nie drauf gekommen.
Die Ausgabe habe ich geändert, funktioniert auch super.
Danke und schönen Abend noch.
Habe sicher bald iwann wieder ne Frage^^deine logischen fehler scheint hier nur einer bemerkt zu haben. von fertig vorgekautem code hast du nicht wirklich einen gewinn.
-
Ja stimmt, aber ich habe einige male (auch im C++ Forum) betont, dass ich Tipps brauche, oder Codeteile sprich 1-2 Zeilen die mir sagen wie ich weiter machen soll.
Und ja, das sind die selben Leute hier^^
Außerdem habe ich den Code jetzt eh verstanden. Alleine umsetzen... weiß nicht.
-
c.nub schrieb:
Alleine umsetzen... weiß nicht.
Du warst aber auf einem guten Weg. Deine ursprünglicher Ansatz sollte zB so funktionieren:
int MyStrCmp (char str[], char str2[]) { int a = 0; while (str[a] == str2[a] && str[a] && str2[a]) a++; return str[a] - str2[a]; }
(ungetestet)
-
Falls du einmal einen K&R in die Finger bekommst, kannst du das ganze auch in Kapitel 5.5 nachlesen. Die Halbgötter machen das dort übrigens sehr ähnlich zu deinem Ansatz:
int strcmp(char *s, char *t) { for ( ; *s == *t; s++, t++) if (*s == '\0') return 0; return *s - *t; }
Das zusätzliche
if
trifft nur zu, wenn in s und t gleichzeitig ein Nullbyte gefunden wird. In dem Fall geben sie, genau wie fricky, gleich Null zurück, ohne die Differenz von Null und Null zu berechnen.