您的位置:首页 > 其它

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

2016-05-20 22:20 369 查看
#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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: