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


Anmelden zum Antworten