字符串分割函数 strtok() 的使用及函数实现

一. 函数的使用

头文件 #include <string.h>

函数原型 char *strtok(char *s, const char *delim);

函数说明 strtok() 用来将字符串分割成一个个片段。
参数s指向欲分割的字符串,参数delim则是一个由分割字符组成的字符串,
delim中的每一个字符都起到分割作用. 
当strtok() 在参数s的字符串中发现到参数delim的分割字符时会将该字符替换为\0字符. 
在第一次调用时,strtok() 必须给参数s赋值,往后调用将该参数设置为NULL,
调动成功返回下一个分割后的字符串指针,若已无从分割则返回NULL

下面看一各使用的例子

/*********************************************************************************
 *      Copyright:  (C) 2020 LuXiaoyang<920916829@qq.com>
 *                  All rights reserved.
 *
 *       Filename:  strtok.c
 *    Description:  This file 
 *                 
 *        Version:  1.0.0(31/07/20)
 *         Author:  LuXiaoyang <920916829@qq.com>
 *      ChangeLog:  1, Release initial version on "31/07/20 04:50:30"
 *                 
 ********************************************************************************/
int main(int argc, char *argv[])
{
    char s[] = "ac;tf-gls;asd:saf-asdasd;asdasd;asd";

    char delim[] = ";-:";

    char *p = NULL;

    printf("%s ",strtok(s,delim));

    while(p = strtok(NULL,delim))
        printf("%s ",p);

    printf("\n");

    return 0;
}

在这里插入图片描述

二. 源码实现

/*
 *  函数名    char *my_strtok(char *str,char *delim)
 *  函数功能  分割字符串
 *  参数      str - 要分割的字符串      delim - 分割字符
 *  返回值    成功返回分割到的第一个字符串,无从分割返回NULL
 * 
 * */
char *strtok(char *str,const char *delim)
{
    static char *next_start = NULL;  //保存到静态存储区,函数返回后不会被销毁

    if(str == NULL && (str = next_start) == NULL)
    {
        return NULL;
    }

    char       *s = str;
    const char *t = NULL;

    while(*s)
    {
        t = delim;

        while(*t)
        {
            if(*t == *s)
            {
                next_start = s + 1;

                if(s == str)    //第一个字符就是分隔符
                {
                    str = next_start;
                    break;
                }
                else
                {
                    *s = '\0';
                    return str;
                }
            }
            else
            {
                t++;
            }
        }

        s++;
    }

    return NULL;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值