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!!!!
Guybrush Threepwood Geschrieben 18. Oktober 2006 Geschrieben 18. Oktober 2006 Mit strstr kannst du nach Teilstrings suchen und mit strcpy kannst du Strings kopieren.
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!!!
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
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:
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.
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...
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); }
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.
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?!
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?
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden