自己实现strtok函数

思路:每次在原来字符串中查找分隔字符串,将分隔字符串中所有字符设为'\0',然后输出分隔串前的子串,同时更新原串的起始位置。

PS:有不少博客作者自己实现的方法中往往只将分隔串当做一个字符,实际上可以是一个字符串,这点需要注意

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 char* my_strtok(char* str, const char *delimit)
 6 {
 7     static char* tmp = NULL;
 8     char *ret = NULL;
 9     if(delimit == NULL) return str;
10     if(str != NULL)
11         tmp = str;
12     if(tmp == NULL) return NULL;
13     ret = tmp;
14     char *p = strstr(tmp, delimit);
15     if(p != NULL)
16     {
17         tmp = p + strlen(delimit);//tmp要更新为下次的起始点
18         int i;
19         for(i = 0; i < strlen(delimit);i++)//将原串中的分隔符字符串都设置为'\0',保证输出ret时,只输出第一段,达到分割的效果
20         {
21             *(p + i) = '\0';
22         }
23     } else {        //分隔符无法对剩下的字符串进行分割了
24         tmp = NULL; //下次调用将直接返回NULL
25     }
26     return ret;
27 }
28 
29 
30 int main()
31 {
32     char str[] = "aabbccddcceeff";
33     char str2[] = "aabbccddcceeff";
34 
35     puts("Output from strtok:");
36     char * ret = strtok(str, "cc");
37     while(ret != NULL)
38     {
39         puts(ret);
40         ret = strtok(NULL, "cc");
41     }
42 
43     puts("Output from my_strtok:");
44     char * ans = my_strtok(str2, "cc");
45     while(ans != NULL)
46     {
47         puts(ans);
48         ans = my_strtok(NULL, "cc");
49     }
50 
51     return 0;
52 }

测试输出如下:

posted @ 2017-08-16 12:18  木子可  阅读(1190)  评论(0编辑  收藏  举报