String zerteilen



  • Hi all,

    sorry für meinen evtl. einfaches Problem. Aber ich habe länger gesucht und leider nichts passendes gefunden. Ich möchte gerne einen String zerteilen welcher folgendermassen aufgebaut ist:

    function(key,value)

    Nun möchte ich ihn in 3 Strings schreiben (function,key,value).

    Ich habe es bereits mit strtok versucht, bin leider nicht viel weiter gekommen, da er nicht einmal 3 Teilstrings erstellt:

    int counter = 1;
    char* pch = NULL;
    //char function[10] = "";
    //char key[10] = "";
    //char value[10] = "";
    pch = strtok(userInput, "(,)");
    while (pch != NULL)	{
        counter = counter + 1;
        pch = strtok(userInput, "(,)");
    }
    

    Könnt ihr mir weiter helfen? - Ich würde die 3 Werte anschliessend gerne in Varieblen schreiben.

    Danke für die Hilfe



  • The strtok() function parses a string into a sequence of tokens. On the first call to strtok() the string to be parsed should be specified in str. In each subsequent call that should parse the same string, str should be NULL.

    Also ein Blick in die Hilfe ist meistens angebracht...

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    	char input[] = "function(key,value)", *p;
    
    	for (p = strtok(input, "(,)"); p; p = strtok(0, "(,)"))
    		printf(": %s\n", p);
    
    }
    


  • du solltest mal nen beispiel posten. string vorher - 3 strings nachher.
    denn ich werd da nicht ganz schlau draus was du vorhast.

    meinst du sowas
    char* str = "function(key,value)",
    char str1[] = {"function"};
    char str2[] = {"key"};
    char str3[] = {"value"};

    ?



  • Hi Poster,

    genau so etwas meine ich :).

    @lagoplex.

    Danke für deine Hilfe, leider reicht "C-Anfängern" die Hilfe nicht ganz. Ich werde mich melden wenn ich deine Lösung ausprobiert habe.

    In jedem Fall schonmal danke für die Hilfe 👍

    Gruss



  • So, hab nun das ausprobiert (genau wie in Post #2 vorgeschlagen).

    Ich habe in der for-Schleife einen Counter eingebaut, leider läuft es nur einmal durch... bei einem Input von "function(key,value)" sollte es ja 3 mal durch gehen... an was kann das sonst noch liegen?

    Gruss



  • Wie hast du denn den counter eingebaut?
    So wie ich das Programm gepostet habe, gibt es alle drei Teilstrings nach einander aus.

    #include <stdlib.h> 
    #include <stdio.h> 
    #include <string.h> 
    
    int main() 
    { 
        char input[] = "function(key,value)", *p; 
        int i;
    
        for (p = strtok(input, "(,)"), i = 0; p; p = strtok(0, "(,)"), ++i) 
            printf("%d: %s\n", i, p); 
    
    }
    


  • poste doch mal pls deinen code - lagalopex post ist an sich völlig io!



  • Hi, vielleicht hab ich auch was übersehen... 😕

    void seperateCommand(void)	{
    	int counter = 1;
    	char userInput[25] = "function(key,value)", *p;
    	//char command;
    	//char key;
    	//char value;
    	for (p = strtok(userInput,"(,)"); p;p = strtok(0,"(,)"))	{
    		counter = counter + 1;
    	}
    

    Der Counter zeigt mir nach dem Durchlauf nur "1" an.
    Zur erklärung wegen dem Counter: Ich will nur schauen ob das mit dem Pointer richtig funktioniert. Die Variablen nachher rauszuschreiben sollte kein grosses Problem sein und mit dem möchte ich euch nicht belasten 😉



  • noname17 schrieb:

    Der Counter zeigt mir nach dem Durchlauf nur "1" an.

    Er zeigt garnicht, da er nicht ausgegeben wird. Und bei mir würde er 4 zeigen...

    noname17 schrieb:

    Zur erklärung wegen dem Counter: Ich will nur schauen ob das mit dem Pointer richtig funktioniert.

    Wenn er die richtigen Strings ausgibt, sollte das mit den pointern ja wohl funktionieren...

    noname17 schrieb:

    Die Variablen nachher rauszuschreiben sollte kein grosses Problem sein und mit dem möchte ich euch nicht belasten 😉

    Da bin ich mir gerade nicht so sicher...



  • for (p = strtok(userInput,"(,)"); p;p = strtok([b]NULL[/b],"(,)"))
    


  • So, es läuft.

    Erstmal danke für die Hilfe, ich bin sehr froh dass es dieses Forum mit kompetenter Hilfe gibt.
    Ich war/bin mit Pointern leider nicht sehr vertraut und werde es weiter vertiefen.

    Ich möchte noch gerne aufführen was bei mir spezifisch das Problem war:

    Da ich mit einem PIC und somit mit einem Speziellen Compiler von Microchip (C18) arbeite, funktionierte nur die funktion strtokpgmram. Anschliessend hat der Code von Post #2 perfekt funktioniert 👍

    Gruss an alle 🙂


Anmelden zum Antworten