kale_1990 Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 hallo, ich brauche eine routine die einen string übergeben bekommt. in diesem string steht "REM IF variable operator 'vergleichstext'" es ist ein einzeiliger string: char line[512]; nun muss diese programm "REM IF" komplett wegsplitten und variable operator und 'vergleichstext' in 3 verschiedene variablen schreiben, danach muss es schaun wenn operator = '==' dann muss variable == 'vergleichstext' sein wenn operator = '!=' dann muss variable != 'vergleichstext' sein wenn dann die variable == 'vergleichstext' bzw. nicht gleich 'vergleichstext' soll der wert 1 von der routine zurückgegeben werden! ich hab schon was versucht aber ich komm auf kein ergebnis...wär echt cool wenn mir jemand helfen könnt....wenigstens ansatzweise! danke schon im vorraus an alle die sich beteiligen!!!! Zitieren
Guybrush Threepwood Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Mit strstr kannst du nach Teilstrings suchen und mit strcpy kannst du Strings kopieren. Zitieren
kale_1990 Geschrieben 18. Oktober 2006 Autor Geschrieben 18. Oktober 2006 das heißt: char suchstr[7] = "REM IF "; char *strstr(const char *line, const char *suchstr und jetz weiß ich aber nicht wie ich den string der nach "REM IF " kommt rauskopieren soll weil er ja nicht fest sondern variabel ist!!! Zitieren
Guybrush Threepwood Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Aber du weißt wo dein Suchstring beginnt und wie lang der ist, also weißt du auch wo das Stück nach deinem Suchstring beginnt. PS: Mehrere Ausrufezeichen gelten als unhöflich Zitieren
kale_1990 Geschrieben 18. Oktober 2006 Autor Geschrieben 18. Oktober 2006 stimmt das weis ich aber ich weiß nicht wie ich es umsetzen soll!? bin im 2. monat von meiner ausbildung. oh tut mir leid wollt nicht unhöflich sein hab ich mir aber irgendwie so angewöhnt das ich 3 ausrufezeichen mach ... genauso wie . und ? :cool: Zitieren
Guybrush Threepwood Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Ich seh gerade das char suchstr[7] = "REM IF "; falsch ist. Das ist eine Stelle zuwenig. Du brauchst ja noch eine für die abschließende binäre Null. Das heißt es muss char suchstr[8] = "REM IF "; heißen, oder direkt char suchstr[] = "REM IF "; Du könntest es jetzt so ungefähr machen: char* lpPointer; lpPointer = strstr(line, suchstr); if (lpPointer) { strncpy(ziel,lpPointer+7,stellen); } [/PHP] Ist natürlich nur Pseudocode... PS: und das Beispiel setzt vorraus das nach dem Suchstring noch mehr in dem Array steht, sonst würdest du was anderes kopieren oder Zugriffsverletzung bekommen. Zitieren
Hexagon Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Auch auf die Gefahr hin dass ich wieder Mist erzähle: char* ist ein Zeiger auf den Speicherbereich eines chars. Per char++ dürftes du an der nächsten Stelle sein. EDIT: Zuspät... Zitieren
kale_1990 Geschrieben 18. Oktober 2006 Autor Geschrieben 18. Oktober 2006 hier hab ich mal nen code. kannst du(Guybrush Threepwood) mal schaun ob es so funktionieren würde das am ende in den variablen das richtige drinsteht? wäre cool! jezt mal nur das splitten! int rem_if(char line) { char suchstr_g[] = "REM IF "; char suchstr_v[]; char suchstr_o[] = "="; char suchstr_t[]; char* pointer; char ges[]; char variable[]; char operator[]; char vergleichstext[]; pointer = strstr(line, suchstr_g); strncpy(ges,pointer+7,250); pointer = strstr(ges,suchstr_o); strncpy(variable,0+pointer,250); pointer = strstr(ges,suchstr_o); strncpy(operator,pointer+2,250); pointer = strstr(ges,suchstr_o); pointer = pointer+2; strncpy(vergleichstext,pointer,250); } Zitieren
Guybrush Threepwood Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Warum probierst du es nicht einfach aus? Der Debugger ist dabei auch sehr sehr hilfreich. Allerdings sehe ich gerade was anderes: Das hier: char suchstr_g[] = "REM IF "; funktioniert nur wenn du der Variablen direkt einen Wert zuweist. Wenn du die später füllen willst dann musst du schon eine Arraygröße angeben, oder das später dynamisch reservieren. Aber ich denke die Größe fest angeben reicht erstmal. Zitieren
kale_1990 Geschrieben 19. Oktober 2006 Autor Geschrieben 19. Oktober 2006 int rem_if(char line) { char suchstr_g[512] = "REM IF "; char suchstr_v[512]; char suchstr_o[512] = "="; char suchstr_t[512]; char* pointer; char ges[512]; char variable[512]; char operator[512]; char vergleichstext[512]; int retval; pointer = strstr(line, suchstr_g); strncpy(ges,pointer+7,512); pointer = strstr(ges,suchstr_o); strncpy(variable,0+pointer,512); pointer = strstr(ges,suchstr_o); strncpy(operator,pointer+2,512); pointer = strstr(ges,suchstr_o); pointer = pointer+2; strncpy(vergleichstext,pointer,512); if(operator == "=") { if(variable == vergleichstext) { retval = 1; } else { retval = 0; } } else { retval = 0; } return retval; } kann das so funktionieren??? das ist jetz mein komplettes programm...werden eventuell vorhandene leerzeichn ignoriert? wenn jetz varible = " hallo " ist und vergleichstext = "hallo" ist erkennt er es dann als richtig an?! Zitieren
Klotzkopp Geschrieben 19. Oktober 2006 Geschrieben 19. Oktober 2006 kann das so funktionieren???Nein, das lässt sich ja nicht mal compilieren. Der Parameter ist vom Typ char, das ist ein einzelnes Zeichen. Wenn du eine Zeichenkette übergeben willst, sollte das schon char* sein. Außerdem kannst du char-Zeiger-Strings nicht mit == vergleichen. Benutz strcmp. das ist jetz mein komplettes programm...werden eventuell vorhandene leerzeichn ignoriert? wenn jetz varible = " hallo " ist und vergleichstext = "hallo" ist erkennt er es dann als richtig an?!Würde mich wundern. In deinem Code ist nichts, was das bewirken würde. Oder erwartest du, dass das automatisch funktioniert? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.