3

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

 pippo:c:C2,C3,C4:pippo

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

4

2 回答 2

7

如果您只想要 :c: 部分中的 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"

于 2012-10-29T16:30:52.487 回答
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;
}
于 2012-10-29T16:35:00.390 回答