C语言strtok函数使用实例以及注意事项

C语言strtok函数使用

使用场景

字符串内容中被某个或者某些字符分割成若干部分,需要取出被分隔的若干个子字符串又不想去确定特殊字符的个数。
比如将下列字符串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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值