请向我解释strtok()
函数的工作原理。手册说它将字符串分解为标记。我无法从手册中理解它的实际作用。
我在 str
和 *pch
上添加了 watches 来检查它在第一个 while 循环发生时的工作情况,str
的内容只有 "这个”。下面显示的输出是如何打印在屏幕上的?
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}
输出:
Splitting string "- This, a sample string." into tokens: This a sample string
最佳答案
strtok 运行时函数是这样工作的
第一次调用 strtok 时,您提供了一个要标记化的字符串
char s[] = "this is a string";
在上面的字符串中,空格似乎是单词之间的一个很好的分隔符,所以让我们使用它:
char* p = strtok(s, " ");
现在会搜索 's' 直到找到空格字符,返回第一个标记('this')并且 p 指向该标记(字符串)
为了获取下一个标记并继续使用相同的字符串 NULL 作为第一个传递 参数,因为 strtok 维护一个指向您之前传递的字符串的静态指针:
p = strtok(NULL," ");
p 现在指向 'is'
依此类推,直到找不到更多空格,然后返回最后一个字符串作为最后一个标记“string”。
更方便的是你可以这样写而不是打印出所有的标记:
for (char *p = strtok(s," "); p != NULL; p = strtok(NULL, " "))
{
puts(p);
}
编辑:
如果你想存储从 strtok
返回的值,你需要将 token 复制到另一个缓冲区,例如strdup(p);
因为原始字符串(由 strtok
中的静态指针指向)在迭代之间被修改以返回 token 。
关于c - strtok() 如何在 C 中将字符串拆分为标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3889992/