strcmp funktion selber coden
-
Der Ansatz klingt schon gut. Du gehst in einer Schleife über die Array-Elemente bis entweder einer der Strings zu Ende, oder sie ungleich sind.
Anschließend gibst du, je nachdem, welcher dieser Fälle eingetreten ist einen entsprechenden Wert zurück (0 für Gleichheit, -1 wenn an der ersten ungleichen Stelle string1 < string2, 1 wenn string1 > string2 ist)
-
c.nub schrieb:
Ich bin jetzt in der 2. HTL und wir lernen C mit dem Visual Studios Compiler.
Na, dann bist du hier im C++ Forum eigentlich falsch.
Also, ich habe zwei String Arrays, diese vergleiche ich in einer while Schleife, mit hilfe des ASCI codes, ob sie gleich sind.
Das ist meine Idee ich kann es aber nicht ganz umsetzen.Das klingt doch gänzlich richtig, du musst doch nur deine Worte in Code umschreiben (ungetestet, geht ja nur um einen Ansatz):
int i=0; int areequal = 1; // Bool gibt's glaube ich nicht in C while (string1[i] && string2[i] && areequal){ // Bis ein Nullzeichen erreicht ist, siehe Nullterminierung. Oder bis ein Unterschied gefunden wurde, den Rest kann man sich dann sparen areequal = (string1[i] == string2[i]) // Vergleiche die Werte der einzelnen Zeichen. Sind sie unterschiedlich, wird areequal zu 0 ++i; // Nächstes Zeichen } return areequal;
Wie man sieht, wäre eigentlich eine for-Schleife passender, aber die beiden Konstruktionen sind ja äquivalent. Das Drumherum der Funktion und Finden eventueller Fehler überlasse ich dir zur Übung.
-
Scotty::BeamToAnsiC();
-
Naja bei strlen war es einfach, wegen der binären 0, denke da muss man bei strcmp auch drauf achten
int MyStrLen (char str[]) { int i = 0; while (str[i] != '\0') i++; return i; }
Bei strcmp muss ich denk ich mal die Folgende Schleife machen, und dann in der Schleife abfragen, ob str größer als str2 ist, bzw gleich oder kleiner
dann ein return ?int MyStrCmp (char str[], char str2[]) { int a; a = 0; while (str[a] == str2[a] || str[a] != '\0' || str2[a] != '\0') { } }
-
Überleg nochmal, ob du die Schleife wirklich laufen lassen willst, solange die Strings gleich oder noch nicht zu Ende sind.
-
int stringverglech( char *a, char *b ) { int i; for ( ; a[i] && b[i]; i++){ if ( a[i] != b[i]) return a[i] < b[i] ? -1 : 1; } return 0; }
a unf b sind die Zeiger auf die zu vergleichenden Strings, beide sind mit 0 terminiert.
i ist die Laufvariable. Die Schleife läuft bis entweder a[i] oder b[i] gleich 0 ist.
Dann wird geschaut ob beide ungleich sind, das Ergebenis des Vergleichs wird zurückgegeben.
Ist die Schleife fertig und alles war gleich, wird eine 0 zurückgegeben.
-
- i wird nicht initialisiert
- stringvergleich("abcde", "abcdefg") gibt 0
-
wx++ schrieb:
Überleg nochmal, ob du die Schleife wirklich laufen lassen willst, solange die Strings gleich oder noch nicht zu Ende sind.
Da ist ja nichts in der Schleife drinnen, das frage ich ja euch, aber ich bin gerade drann, ich denke ich habe es gleich.
da gehört natürlich a++; rein.
-
Erst mal danke für die vielen und schnellen Antworten, aber mir hat nicht jede etwas gebracht. Es geht viel einfacher auch!
So, habe es hin bekommen, aber es hakt bei der Ausgabe, ich sehe es mir nochmal an und frage euch wenn ich mich nicht mehr auskenne.int MyStrCmp (char str[], char str2[]) { int a; a = 0; while (str[a] == str2[a] || str[a] != '\0' || str2[a] != '\0') { if (str[a] > str2[a]) { return 1; } if (str[a] < str2[a]) { return -1; } if (str[a] == str2[a]) { return 0; } a++; } }
-
Sag mal... warum nervst du denn damit die C++-Leute? Die haben für sowas strings.
Da nervt man besser die ANSI-Leute, aber am besten Google:
http://www.google.at/search?q=strcmp+implementationStell dir vor! Der vierte Treffer ist sogar auf Wikipedia!
-
Sehr gut, hab es hin bekommen.
Wenn ihr wollt schicke ich euch den ganzen Code von meinem Miniprogramm.
Jemand hat gesagt, ich bin hier nicht richtig, wo sollte ich hin? Ich programmiere in C nicht in C++. Nur mit einigen Feinheiten von C++ wie zB den Kommentarbefehlen //
-
ups ...
-
du musst nicht auf beide enden prüfen...
sieht zwar auch nicht gerade toll aus, aber davor sah es noch hässlicher aus ;P
(und noch dazu war deine fkt noch immer falsch, weil sie nur das erste zeichen geprüft hat...)int MyStrCmp (const char *str, const char *str2) { for(; ; ++str, ++str2) { if(*str != *str2) return *str > *str2 ? 1 : -1; if(*str == '\0') break; } return 0; }
vll kann man das hier:
if(*str != *str2) return *str > *str2 ? 1 : -1;
weiß nich genau, ob man hier iwie str-str2 schreiben kann - weil signed unterlauf ja impl. defined ist - >0 / <0 sollte eigtl noch stimmen, nur das ergebnis nicht zwangsläufig - hab aber gerad keine zeit mehr, darüber nachzudenken, was passieren könnte^^
bb
PS: C Unterforum
Nur mit einigen Feinheiten von C++ wie zB den Kommentarbefehlen //
schlechter scherz?
edit: ok, hab den grund gefunden
-
c.nub schrieb:
Sehr gut, hab es hin bekommen.
Wenn ihr wollt schicke ich euch den ganzen Code von meinem Miniprogramm.
Jemand hat gesagt, ich bin hier nicht richtig, wo sollte ich hin? Ich programmiere in C nicht in C++. Nur mit einigen Feinheiten von C++ wie zB den Kommentarbefehlen //
Hier her, fühl dich herzlich willkommen:
http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html
Nachtrag:
hab nich alles gelesen: aber wieso willst du nen eigenes bauen, wenn dir offensichtlich grundlegendes wissen fehlt?
Einfach nicht ernst nehmen. Mach's so wie Wikipedia.
-
mngbd schrieb:
Sag mal... warum nervst du denn damit die C++-Leute? Die haben für sowas strings.
Da nervt man besser die ANSI-Leute, aber am besten Google:
http://www.google.at/search?q=strcmp+implementationStell dir vor! Der vierte Treffer ist sogar auf Wikipedia!
Ich mag es grundsätzlich nicht, Leute fertig zu machen, aber bei dir muss es einfach sein.
1. Wenn du schon die überschrift von meinem Theard siehst, warum klickst du drauf? Nein du musst so assozial sein, und unbedingt auffallen und anders sein als wie die anderen Leute, die hilfsbereit und nett sind, und überhaupt nicht meckern.
2. Das war mein erster Beitrag hier, das kann schon sein, dass man beim ersten mal auf das falsche klickt, weil ich mich noch nicht so gut auskenne.
Ich programmiere erst einen Monat in C. Davor habe ich nur VB gelernt.
3. Ich nerve hier keinen außer dich.
4. Ich kann zwar sehr gut Englisch (gibt es sicher auch in Deutsch, aber ich sage das für den Fall, dass dann ein billiges Konterargument kommt wie: "ja nur weil du kein Englisch kannst"), aber falls ich dann doch eine Frage habe, und es nicht ganz verstehe, dass ich fragen kann. Ich habe mich erst hier angemeldet. Man sollte nen IQ-Test in die Registration einbauen, dann können so Typen wie der da nicht hier rein.Grow up. Auch wenn du älter bist.
-
c.nub schrieb:
Jemand hat gesagt, ich bin hier nicht richtig, wo sollte ich hin? Ich programmiere in C nicht in C++. Nur mit einigen Feinheiten von C++ wie zB den Kommentarbefehlen //
Guck doch mal in der Forenübersicht. Das sieht folgendermaßen aus:
**Programmiersprachen
**
ANSI C
Fragen zu bestimmten Funktionen und Abläufen in C, Benutzung der Standardlibs von C, Zeiger und Strings. Fragen zu C für Dummies hier stellen, bitte keine Fragen zu Windows/Linux oder C++!C++
Fragen zu bestimmten Funktionen und Abläufen in C++ (nach dem ISO-Standard), damit man mal erfährt, was pure virtual bedeutet, oder wie das mit den Templates und der STL geht. Bitte keine Fragen zu Windows/Linux-Programmierung hier posten!C# und .NET
Fragen zur neuen Sprache C#, zu den Funktionen und Abläufen, Anwendungen und Befehlen. Außerdem der Anlaufpunkt zu Fragen rund um die .net-Plattform. Fragen zu den IDEs gehören nicht hier rein (Bedienung/Installation/... von VC++.NET/2003 -> VC++ Forum).Java
Plattformunabhängige Programmierung basierend auf dem aktuellen SDK. Einbindung von systemabhängigem Code in Java, Java-Swing, RMI, Reflection und natürlich objektorientierte Programmierung mit Java. Kein JavaScript!Assembler
Für die Hardcore-Freaks unter uns... hier wird nur mit Mnemonics und Hexzahlen gearbeitet. Von 80x86 bis PIII und Athlon, aber auch andere Prozessoren werden nicht ignoriert. Lasst aber die Lötkolben stecken!Was davon klingt denn deiner Meinung nach so, als könnte es dort um C gehen?
-
schlechter scherz?
hab nich alles gelesen: aber wieso willst du nen eigenes bauen, wenn dir offensichtlich grundlegendes wissen fehlt?Weil wir das in der Schule machen. Für diese Aufgabe fehlt mir nicht das grundlegende Wissen, eher die Befehle für eine elegantere Lösung.
-
SeppJ schrieb:
Was davon klingt denn deiner Meinung nach so, als könnte es dort um C gehen?
ANSI C??^^
-
richtig, ansi c...
du hast aber mittlerweile mitbekommen, dass deine fkt noch immer nicht das tut, was sie soll?!
bb
-
Doch habe ich mit bekommen.
Aber beim return komm ich nicht mehr mit. Das mit dem Fragezeichen haben wir zB noch nicht gelernt.
Es gibt sicher eine andere noobigere Variante für Noobs wie mich^^
Ich überlege mal weiter, und guck mir das nochmal an