仅限strtok到3个令牌

时间:2017-04-16 14:05:52

标签: c tokenize

我的数据字符串如下:3,1,6,IN,88。 我只需要获得前3个周期(3 | 1 | 6 | IN,88 ) 因此它会在最后一个,之前停止循环,最后一个字符串将是IN,88

char *pch=strtok (data,",");
 while (pch != NULL)
        {
            //works well here
            pch = strtok (NULL, ",");
        }

也会拆分IN,88,我想用逗号保留它。

设置一个计数器以突破3将显然不起作用。 有没有一种简单的方法可以在不改变数据的情况下实现这一目标?

1 个答案:

答案 0 :(得分:0)

在标记化后,您需要原始字符串的未标记部分。您还需要将输入字符串标记为指定的次数。你可以试试这个。

char *tmp; // will store the untokenized part of the string
int count; // how many times the string will be tokenized
tmp = data; // before starting to tokenize, the whole input is untokenized
char *pch = strtok (data,",");
count = 1;
while (pch != NULL && count <= 3) // you want to tokenize thrice
{
    tmp = tmp + strlen(pch) + 1; // shift the pointer pointing untokenized string
    pch = strtok(NULL,",");
    count++;
}
tmp = tmp + strlen(pch) + 1; // shift the pointer after last tokenization

在此之后,如果你执行puts(tmp);,你将获得字符串的未标记部分作为输出。