linux c strtok函数的用法详解

用下面示例说明strtok函数的各种用法的关键点

1、用strtok函数分割字符串后,原字符串被修改

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char send_str[600]={0};
    char nr[10][20]={0};
    char *p;

    int i=0;

    strcpy(send_str,",aaa,bbb,ccc");
    puts(send_str);
    p=strtok(send_str,",");
    while(p!=NULL)
    {
        strcpy(nr[i],p);
        puts(nr[i]);
        i++;
        p = strtok(NULL, ",");
    }
    puts(send_str);

    return 0;
}
 

输出结果:

aaa,bbb,ccc,

aaa

bbb

ccc

aaa

说明:strtok函数是把字符串中分割分割符替换为0,也就是字符串的结束符

2、strtok函数直接跳过字符串首部直接为分割字符串

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char send_str[600]={0};
    char nr[10][20]={0};
    char *p;

    int i=0;

    strcpy(send_str,",aaa,bbb,ccc,");
    puts(send_str);
    p=strtok(send_str,",");
    while(p!=NULL)
    {
        strcpy(nr[i],p);
        puts(nr[i]);
        i++;
        p = strtok(NULL, ",");
    }
    puts(send_str);

    return 0;
}


输出结果:

,aaa,bbb,ccc,

aaa

bbb

ccc

,aaa

说明:字符串首部正好为分割符时,strtok函数直接跳过

3、字符串尾部有没有分割符,都可以分割尾部字符串

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char send_str[600]={0};
    char nr[10][20]={0};
    char *p;

    int i=0;

    strcpy(send_str,",aaa,bbb,ccc");
    puts(send_str);
    p=strtok(send_str,",");
    while(p!=NULL)
    {
        strcpy(nr[i],p);
        puts(nr[i]);
        i++;
        p = strtok(NULL, ",");
    }
    puts(send_str);

    return 0;
}


输出结果:

,aaa,bbb,ccc

aaa

bbb

ccc

,aaa

4、分隔符为多个字符时,即为字符串时,源字符串被分割字符串中任意一个字符分割

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char send_str[600]={0};
    char nr[10][20]={0};
    char *p;

    int i=0;

    strcpy(send_str,"aaa,bbb,;ccc;ddd");
    puts(send_str);
    p=strtok(send_str,",;");
    while(p!=NULL)
    {
        strcpy(nr[i],p);
        puts(nr[i]);
        i++;
        p = strtok(NULL, ",;");
    }
    puts(send_str);

    return 0;
}


输出结果:

aaa,bbb,;ccc;ddd

aaa

bbb

ccc

ddd

aaa

5、strtok函数不能嵌套使用

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char send_str[600]={0};
    char nr[10][20]={0};
    char *p,*p1;

    int i=0;

    strcpy(send_str,"aaa,bbb;ccc,ddd");
    puts(send_str);
    p=strtok(send_str,";");
    while(p!=NULL)
    {
        p1=strtok(p,",");
        while(p1!=NULL)
        {
            strcpy(nr[i],p1);
            puts(nr[i]);
            i++;
            p1 = strtok(NULL, ",");
        }
        p = strtok(NULL, ";");
    }
    puts(send_str);

    return 0;
}


输出结果:

aaa,bbb;ccc,ddd

aaa

bbb

aaa

说明:strtok函数的第一个参数不为NULL,strtok函数开始分割这个字符串,执行后,strtok内部会保存一个指针,这个指针指向这个字符串找到这个分割符后面第一个字符,如果下次调用strtok函数的第一个参数为NULL,strtok会从保存的这个指针开始查找分割符

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值