strtok的单一字符

时间:2012-10-29 16:24:33

标签: c

我必须用这种格式标记字符串:

 pippo:c:C2,C3,C4:pippo

如何使用strtok对此字符串进行标记(一旦我完成标记,我就不需要字符串了)。我希望将单个字符存储到char变量中,而不是存储在char *变量中。

2 个答案:

答案 0 :(得分:7)

如果你只想要c:part中的c,并且你知道事情会有这种格式,你就不必像标记那样。你可以简单地做

char c = strchr(str, ':')[1];

这将找到第一个:,并获取其后的字符。当然,strtok也会起作用:

strtok(str, ":");
char c = strtok(NULL, ":")[0];

这将获取第二个标记化的单词,并获取该单词的第一个字符。一般来说,如果你想要进一步的东西,你可能想要使用循环。并非str缓冲区在这种情况下必须是可写的,与其他缓冲区不同。

最后,如果pippo部分总是具有相同的长度,那么您可以简单地使用

char c = str[6];

在所有情况下,str = "pippo:c:C2,C3,C4:pippo"

答案 1 :(得分:0)

如果要使用strtok()在两个令牌之间获取单个字符,可以通过检查已提取的字符串长度来实现。

int main ()
{
    char str[] ="pippo:c:C2,C3,C4:pippo";
    char * pch;
    char winner;

    pch = strtok (str,":"); 
    while (pch != NULL)
    {
      if(strlen(pch) == 1){   // if there's only 1 char we got it
        winner = pch[0];      // if there's more than 1 single char of :x: format you
        break;                // could check for that too here.
      }
      pch = strtok (NULL, ":");
    }

    printf("And the winner is: %c\n", winner);
    return 0;
}