Разделить токен дважды с помощью другого кода C - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь разделить токен с двумя разными разделителями, но двойное использование strtok () в одной строке дает неожиданные результаты.После первого strtok я хотел бы иметь:

0
1
2
3
4;5;6;7
8
9
10

После второго strtok:

0
1
2
3
4
5
6
7
8
9
10

Вот мой код:

char *token;
x[0] = {0};
char str[1024] = "0,1,2,3,4;5;6;7,8,9,10;
token = strtok( str, ",');

printf("token is %s\n", token);


//Second 'split'

char *p = strtok (token, ';');
while (p != NULL)
{
    array[z++] = p;
    p = strtok (NULL, seps2);
}

for (int i = 0; i < count + 1; ++i) 
    printf("%s\n", array[i]);

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Второй аргумент strtok() представляет собой строку каждый символ которого считается разделителем при маркировке строки.

Таким образом, вы можете сделатьВаши strtok() вызовы будут strtok(str, ",;"), как в

char s[]="0,1,2,3,4;5;6;7,8,9,10";
for(char *tk = strtok(s, ",;"); tk!=NULL; tk=strtok(NULL, ",;"))
{
    printf("%s\n", tk);
}

Выходные данные в этом случае будут

0
1
2
3
4
5
6
7
8
9
10

Обратите внимание, что strtok() изменит исходную строку.

0 голосов
/ 03 июня 2019

Если вы работаете в системе POSIX, попробуйте strtok_r() ( см. Ideone ).

В противном случае ( см. Ideone )вам нужно сохранить результаты из strtok(XXX, ",") и применить strtok(XXX, ";") к каждому результату отдельно.

...