自己写的一个功能类似于strtok函数的函数

#include <stdio.h>

//字符串比较函数,两个字符串相同就返回1,否则返回0
static int my_strcmp( const char *dest, const char *src, int len)
{
    int i;
    for(i = 0;i < len; i++)
    {
        if(src[i] != dest[i])
        {
            return(0);
        }
    }
    return(1);
}


char *my_strtok(char *str, const char *delim)
{
    int i = 0;
    int len = strlen(delim);
    char *ret_p;
    char *temp;  //临时变量,用来遍历字符串str
    static char *save_p;  //静态变量用来保存上一次返回地址
    temp = (str == NULL) ? save_p : str;//如果是第一次使用,则从字符串首地址开始查找,否则从上一次返回的地点开始查找
    ret_p = temp; //需要返回的地址


    if(1 == len)   //如果delim只有一个字符,就直接比较,不需调用 my_strcmp函数
    {
        /*****************************************/
     
        while(*temp != '\0')
        {
            if(*delim == *temp)
            {
                *temp = '\0';  //将字符串从此处"剪断"
                save_p = ++temp;
                return(ret_p);
            }
            temp++;
        }
       // return(NULL);
    }


    else   //如果delim有多个个字符,就my_strcmp函数, 这样代码简单
    {
        /******************************************/
        while(*temp != '\0')
        {
            if(my_strcmp(temp,delim,len) == 1)
            {
                *temp = '\0';
                save_p = temp + len;
                return(ret_p);
            }
            temp++;
        }

    }


    return(NULL); //没找到匹配字符或字符串时返回NULL
}


int main()
{
#if 0
    char src[] = "2016//05//20 11::19::32  \0";                       
    char *str = my_strtok(src,"//");
    printf("%s\n",str);//2016
    str =  my_strtok(NULL,"//");
    printf("%s\n",str);//05
    str =  my_strtok(NULL," ");
    printf("%s\n",str);//20
    str =  my_strtok(NULL,"::");
    printf("%s\n",str);//11
    str =  my_strtok(NULL,"::");
    printf("%s\n",str);//19
    str =  my_strtok(NULL,"  ");
    printf("%s\n",str);
#else 
    char src[]="2016/05/20 11:19:32 \0";                       
    char *str = my_strtok(src,"/");
    printf("%s\n",str);//2016
    str =  my_strtok(NULL,"/");
    printf("%s\n",str);//05
    str =  my_strtok(NULL," ");
    printf("%s\n",str);//20
    str =  my_strtok(NULL,":");
    printf("%s\n",str);//11
    str =  my_strtok(NULL,":");
    printf("%s\n",str);//19
    str =  my_strtok(NULL," ");
    printf("%s\n",str);
#endif
    return(0);


}


函数运行结果是在屏幕上打印

2016

05

20

11

19

32


函数的功能是在字符串str中查找delim字符串,找到后把第一个匹配的字符换成'\0',并且返回一个指向一开始查找的字符的地址,

如 char *str="1234567";  char *delim = "5";函数在str中找到'5'后,将'5'换成‘\0’,返回'1'的地址.,在返回前,将'6'的地址保存在

静态的 局部指针 save_p 中,下次调用strtok函数时从 save_p 指向的地址开始查找字符串。第一次调用strtok函数时需要传入一个

地址给 str,之后调用时传NULL给str。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值