strtok verschachteln

Thomasio

Erfahrenes Mitglied
Vermutlich stelle ich mich zu blöd an, sitze schon viel zu lange davor, so dass ich vermutlich das Offensichtliche übersehe, aber vielleicht bringt mich ja hier jemand auf die Idee?

Wenn ich einen string zerlegen will

Code:
string1 = "Irgendwas,mit,nem,haufen,kommas";
char* Buffer;
Buffer = strtok (string1, ",");
while(Buffer != NULL)
       {
            machirgendwas();
            Buffer = strtok (NULL, ",");
       }

aber wie verschachtele ich davon 2 ineinander?

Der folgende Code geht natürlich nicht, weil die "NULL" zum fortsetzen sich gegenseitig überschreiben, ich schreibe es hier trotzdem mal auf, damit ihr wisst, was ich gerne hätte
Vielleicht kann mir jemand eine editierte Version machen, die geht?

Code:
string1 = "Irgendwas,mit,nem,haufen,kommas";
string2 = "Noch,was,mit,kommas";
char* Buffer;
char* Buffer2;
Buffer = strtok (string1, ",");
while(Buffer != NULL)
       {
            Buffer2 = strtok (string2, ",");
            while(Buffer2 != NULL)
                   {
                         machirgendwas();
                         Buffer2 = strtok (NULL, ",");
                   }
            Buffer = strtok (NULL, ",");
       }

danke im voraus
 
Zuletzt bearbeitet:
Also etwas tricky wird's dann schon. Das zurückgegebene Token (Buffer und Buffer2) ist ein Zeiger auf den kompletten Reststring, bei dem das erste Vorkommen des Trennzeichen durch das Nullzeichen ersetzt wird. Übergibt man nun strtok() nicht NULL, sondern einen Zeiger auf das erste Zeichen nach diesem Nullzeichen, entspricht das einem erstmaloigen Aufruf von strtok(), aber mit einem verkürzten String.

C++:
char string1[] = "Irgendwas,mit,nem,haufen,kommas";
char string2[] = "Noch,was,mit,kommas";

char *Buffer;
char *Buffer2;

Buffer = strtok(string1, ",");

while( Buffer != NULL )
{
    Buffer2 = strtok(string2, ",");

    while( Buffer2 != NULL )
    {
        // ... irgendwas tun

        if( (Buffer2 += strlen(Buffer2) + 1) >= (string2 + sizeof(string2)) )
        {
            break; // damit man nicht über's Stringende hinausschießt
        }

        Buffer2 = strtok (Buffer2, ",");
    }

    if( (Buffer += strlen(Buffer) + 1) >= (string1 + sizeof(string1)) )
    {
        break; // damit man nicht über's Stringende hinausschießt
    }

    Buffer = strtok (Buffer, ",");
}

Gruß
MCoder
 
Zurück