使用场景
字符串内容中被某个或者某些字符分割成若干部分,需要取出被分隔的若干个子字符串又不想去确定特殊字符的个数。
比如将下列字符串2164B851B4544AE79A03F2B644985DD1,2164B851B4544AE79A03F2B644985DD2,2164B851B4544AE79A03F2B644985DD3,2164B851B4544AE79A03F2B644985DD4,2164B851B4544AE79A03F2B644985DD5
分割成
2164B851B4544AE79A03F2B644985DD1
2164B851B4544AE79A03F2B644985DD2
2164B851B4544AE79A03F2B644985DD3
2164B851B4544AE79A03F2B644985DD4
2164B851B4544AE79A03F2B644985DD5
5个字串。
代码实例
#include <string.h>
#include <stdio.h>
int main(int argc, char *arg[])
{
char str[] = "2164B851B4544AE79A03F2B644985DD1,\
2164B851B4544AE79A03F2B644985DD2,\
2164B851B4544AE79A03F2B644985DD3,\
2164B851B4544AE79A03F2B644985DD4,\
2164B851B4544AE79A03F2B644985DD5";
printf( "str is \"%s\"\n", str);
char delims[] = ",";
char *result = NULL;
result = strtok(str, delims);
while(result != NULL)
{
printf( "result is \"%s\"\n", result);
printf( "str is \"%s\"\n", str);
result = strtok(NULL, delims);
}
}
运行结果如下:
str is “2164B851B4544AE79A03F2B644985DD1,2164B851B4544AE79A03F2B644985DD2,2164B851B4544AE79A03F2B644985DD3,2164B851B4544AE79A03F2B644985DD4,2164B851B4544AE79A03F2B644985DD5”
result is “2164B851B4544AE79A03F2B644985DD1”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD2”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD3”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD4”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD5”
str is “2164B851B4544AE79A03F2B644985DD1”
注意事项
1.源字符串str 在执行完一次strtok后发生变化。
2.while循环中再次调用strtok时,第一个参数填 NULL。
3.若源字符串str结尾再增加一个分隔符 “,”,运行结果不变(除第一个str的打印)。
4.strtok函数也可以按不止一个字符分割字符串,比如:
#include <string.h>
#include <stdio.h>
int main(int argc, char *arg[])
{
char str[] = "2164B851B4544AE79A03F2B644985DD1,\
2164B851B4544AE79A03F2B644985DD2;\
2164B851B4544AE79A03F2B644985DD3,\
2164B851B4544AE79A03F2B644985DD4;\
2164B851B4544AE79A03F2B644985DD5*\
2164B851B4544AE79A03F2B644985DD6,";
printf( "str is \"%s\"\n", str);
char delims[] = ",;*";
char *result = NULL;
result = strtok(str, delims);
while(result != NULL)
{
printf( "result is \"%s\"\n", result);
printf( "str is \"%s\"\n", str);
result = strtok(NULL, delims);
}
}
运行结果如下:
str is “2164B851B4544AE79A03F2B644985DD1,2164B851B4544AE79A03F2B644985DD2;2164B851B4544AE79A03F2B644985DD3,2164B851B4544AE79A03F2B644985DD4;2164B851B4544AE79A03F2B644985DD5*2164B851B4544AE79A03F2B644985DD6,”
result is “2164B851B4544AE79A03F2B644985DD1”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD2”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD3”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD4”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD5”
str is “2164B851B4544AE79A03F2B644985DD1”
result is “2164B851B4544AE79A03F2B644985DD6”
str is “2164B851B4544AE79A03F2B644985DD1”
参考
https://www.cnblogs.com/roucheng/p/cfenge.html