Veröffentlicht 18. Oktober 200618 j 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!!!!
18. Oktober 200618 j Mit strstr kannst du nach Teilstrings suchen und mit strcpy kannst du Strings kopieren.
18. Oktober 200618 j 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!!!
18. Oktober 200618 j 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
18. Oktober 200618 j 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:
18. Oktober 200618 j 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.
18. Oktober 200618 j 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...
18. Oktober 200618 j 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); }
18. Oktober 200618 j 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.
19. Oktober 200618 j 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?!
19. Oktober 200618 j 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?
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.