Kommandozeile nach ' ' und literal strings trennen
-
Hi C Coderinnen und Coder,
Ich versuche seit einer Stunde eine Kommandozeile zu splitten, z.B.
Er sagte "Mein Hund heisst Bello!"
soll das werden:
Er
sagte
"Mein Hund heisst Bello!"es wird aber
Er
sagte
"Mein
Hund
heisst
Bello!"Ich krieg es irgendwie nicht gebacken. Ich würd eben gerne das auch so wie argv/argc machen, damit ich sehr simpel darauf zugreifen kann jeweils.
Kann mir jemand sagen wie ich das am besten mache? Mit strtok(_r) wurde das schon versucht, auch mit Pointer
Ich versuchte folgender ansatz:
länge des strings speichern (welche ich übergebe)
dann mit einer schleife durchgehen, und alle '"' und ' ' durch \0 ersetzen (natürlich zuerst überprüfen welche ersetzt werden dürfen und welche nicht).
dann nochmals durchlaufen mit einer zweiten schleife, und dann argv[index++] zuordnen.Danke für eure Gedankenshilfen, falls jemand etwas Beispielcode parat hat, würde es auch helfen. Merci
TheSplit_er
-
Du übergibst das so von der Eingabeaufforderung? Dann sollten die einzelnen Teilstring eigentlich in der richtigen Weise auf argv[] verteilt werden.
Wenn du den String von Konsole einliest, mußt du eine Sonderbehandlung für " druchführen:
char input[LINE_LEN]; int i,in_str=FALSE; fgets(input,LINE_LEN,stdin); for(i=0;i<strlen(input);++i) { if(input[i]=='\"') in_str=!in_str; if(input[i]==' ' && in_str) //Splitten }
-
Nein, ich möchte meine eigene kleine "Shell" machen
Danke. ich werds mal so testen.
liebe grüsse, thesplit_er
-
Ich habe es nun mit einem DFA Parser-Algo gelöst (wie lex dieser algo auch hat/benutzt). Funktioniert super schnell (sind aber sehr viele gotos drin). Danke für deine Hilfe CStoll.
Liebe grüsse,
TheSplit_er