在C中的#中拆分字符串

时间:2010-12-28 11:17:45

标签: c string split

我有一个这样的字符串:

char *message = "12#34#56#78#90"

我想得到:

a = "12"
b = "34"
c = "56"
d = "78"
d = "90"

谁能给我一个好方法?

4 个答案:

答案 0 :(得分:8)

使用strtok()。请注意,即使这是C ++文档,该函数也存在于C.请特别注意在后续调用中使用NULL来获取下一个标记。

char label = 'a';
char *token = strtok(message, "#");
while (token != NULL) {
  printf("%c = \"%s\"\n", label++, token);
  token = strtok(NULL, "#");
}

输出:

a = "12"
b = "34"
c = "56"
d = "78"
e = "90"

请参阅http://ideone.com/xk1uO

答案 1 :(得分:2)

标准库中的strtok函数执行此操作,您可以循环提取所有标记的字符串。

答案 2 :(得分:1)

strtok_r就像strtok一样,但更安全。 strtok已被弃用。

答案 3 :(得分:1)

让我们使用strsep - 不需要通过传入NULL来依赖静态变量。

char *string; // It holds "12#34#56"; (cannot be string literal)
char *token = NULL;

while ((token = strsep(&string, "#"))) {
   printf("%s\n", token);
}