使用不同的定界符C代码将令牌拆分两次

时间:2019-06-03 07:09:07

标签: c split token

我正在尝试使用2个不同的定界符来分割令牌,但是在同一字符串上两次使用strtok()会给我带来意想不到的结果。 在第一次strtok之后,我想拥有:

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

第二次启动后:

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 个答案:

答案 0 :(得分:2)

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()会修改原始字符串。

答案 1 :(得分:0)

如果您使用的是POSIX系统,请尝试strtok_r()see ideone)。

否则(see ideone),您需要保存strtok(XXX, ",")中的结果,并将strtok(XXX, ";")分别应用于每个结果。