strcmp
-
Hi Leute
hab hier ein Problem:
#include <iostream.h> #include <conio.h> #include <string.h> class myString { private: char string[1000]; public: char* getString(void); myString(char[]); int getLength(); int compare(myString); ~myString(); }; char* myString::getString(void) { return string; } myString::myString(char S[]) { int i=0; for(i=0; S[i]!='\0'; i++) { string[i]=S[i]; } } int myString::getLength() { int size = strlen(string); return size; } int myString::compare(myString B) { } myString::~myString() { } int main() { myString myStringa("Hallo Welt"); myString myStringb("Hallo"); cout<<myStringa.getLength()<<endl; cout<<myStringb.getLength()<<endl; cout<<myStringa.getString(); getch(); return 0; }Ich muss jetzt Hallo Welt mit Hallo vergleichen. Wie muss ich das jetzt machen?
PS:Ich soll in der Methode compare strcmp benutzen.
-
-
!strcmp("A","B") == false
!strcmp("A","A") == true
-
die frage ist was compare zurückgeben soll. wenn du die gleichen rückgabewerte willst wie bei strcmp() dann gehts so:
int myString::compare(myString B) { return strcmp( string, B.getString() ); }Kurt
-
hallo
1ten: die header ohne h!
Warum schreibst du dir eine eigene stringklasse?
ein kleines beispiel:string string1 = "hallo Welt"; string string2 = "hallo"; int i = strcmp(string1.c_str(), string2.c_str()); if(i == 0) { cout<<"string1 ist gleich wie string2"<<endl; } else if(i > 0) { cout<<"string1 ist groesser"<<endl; } else { cout<<"string2 ist groesser"<<endl;ich habs nicht getestet müsste aber so funktionieren
cu
-
ZuK schrieb:
die frage ist was compare zurückgeben soll.
string<B.getString() dann soll -1 zurück gegeben werden
string=B.getString() 0
string>B.getString() +1
-
Das ist genau was strcmp() zurückgibt. Dann sollte meine Antwort richtig.
K
-
ok...vielen dank
-
noch eine kurze frage...wie kann ich das zurückgegebene ausgeben lassen?
-
BTW: dein constructor funktioniert nicht. string ist so nicht 0-terminiert.
entweder du verwendest strcpy() oder du du must noch ein '\0' anhängen.
Kurt
-
bla1 schrieb:
noch eine kurze frage...wie kann ich das zurückgegebene ausgeben lassen?
cout<<myStringa.compare(myStringb)<<endl;K
-
Entschuldige meine vorige Antwort war falsch strcmp() gibt <0 zurück wenn string1 < string2 und >0 wenn string1 > string2.
dein compare muss dann so aussehen.int myString::compare(myString B) { int cmp =strcmp(string, B.getString()); if ( cmp < 0 ) return -1; if ( cmp > 0 ) return 1; return 0; }Kurt
-
ZuK schrieb:
Entschuldige meine vorige Antwort war falsch strcmp() gibt <0 zurück wenn string1 < string2 und >0 wenn string1 > string2.
dein compare muss dann so aussehen.musst dich nicht entschuldigen...du warst mir eine große hilfe...
Vielen Dank
-
ZuK schrieb:
oder du du must noch ein '\0' anhängen.
wo hin genau jetzt?
-
zb. so
myString::myString(char S[]){ for(int i=0; S[i]!='\0'; i++) { string[i]=S[i]; } string[strlen(S)]='\0'; }Kurt