思路:每次在原来字符串中查找分隔字符串,将分隔字符串中所有字符设为'\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 = ; 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. int main()
  30. {
  31. char str[] = "aabbccddcceeff";
  32. char str2[] = "aabbccddcceeff";
  33.  
  34. puts("Output from strtok:");
  35. char * ret = strtok(str, "cc");
  36. while(ret != NULL)
  37. {
  38. puts(ret);
  39. ret = strtok(NULL, "cc");
  40. }
  41.  
  42. puts("Output from my_strtok:");
  43. char * ans = my_strtok(str2, "cc");
  44. while(ans != NULL)
  45. {
  46. puts(ans);
  47. ans = my_strtok(NULL, "cc");
  48. }
  49.  
  50. return ;
  51. }

测试输出如下:

自己实现strtok函数的更多相关文章

  1. shell脚本调用C语言之字符串切分之strtok函数

    今天上午在写一个需求,要求的比较急,要求当天完成,我大致分析了一下,可以采用从shell脚本中插入一连串的日期,通过调用proc生成的可执行文件,将日期传入后台数据库,在数据库中进行计算.需要切分日期 ...

  2. strtok函数 分类: c++ 2014-11-02 15:24 214人阅读 评论(0) 收藏

    strtok函数是cstring文件中的函数 strtok函数是cstring文件中的函数 其功能是截断字符串 原型为:char *strtok(char s[],const char *delin) ...

  3. strtok函数读写冲突问题

    先上测试代码 #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int a ...

  4. 字符串函数之Strtok()函数

    Strtok()函数详解:   该函数包含在"string.h"头文件中 函数原型: char* strtok (char* str,constchar* delimiters ) ...

  5. STRTOK函数和STRTOK_R函数

    STRTOK函数和STRTOK_R函数 注:本文转载自博客园,感谢作者整理! 1.一个应用实例 网络上一个比较经典的例子是将字符串切分,存入结构体中.如,现有结构体 typedef struct pe ...

  6. popen strtok 函数的使用

    FILE * popen ( const char * command , const char * type ); int pclose ( FILE * stream );   type 参数只能 ...

  7. [转载]strtok函数和strtok_r函数

    1.一个应用实例 网络上一个比较经典的例子是将字符串切分,存入结构体中.如,现有结构体 typedef struct person{     char name[25];     char sex[1 ...

  8. 温故而知新-strtok函数

    温故而知新-strtok函数 记得之前没见过这个函数,是把字符串分割成更小的字符串 来个例子就是比较鲜明了 $string = "Hello world. Beautiful day tod ...

  9. 用strtok函数分割字符串

    用strtok函数分割字符串 需要在loadrunner里面获得“15”(下面红色高亮的部分),并做成关联参数. //Body response 内容: <BODY><; PRE&g ...

  10. lr中用strtok函数分割字符串

    需要在loadrunner里面获得“15”(下面红色高亮的部分),并做成关联参数. ,6,5,0,4,0,3,0,3,2,0,0,0,1 用web_reg_save_param取出“8,7,5,15, ...

随机推荐

  1. .Net Core 部署到Ubuntu 16.04 中的步骤

    需要安装的工具 .Net Core Nginx反向代理服务器(相当于Windows下的IIS) Supervisor(进程管理工具) .Net Core安装方法请参阅 官方文档 安装完成后就可以在项目 ...

  2. django通用视图(类方法)

    这周是我入职的第一周,入职第一天看到嘉兴大佬的项目代码.视图中有类方法,我感到很困惑. 联想到之前北京融360的电话面试,问我有无写过类方法……看来有必要了解下视图的类方法,上网搜了很多,原来这就是所 ...

  3. Office Web Apps Server

    Office Web Apps Server Office Web Apps Server 是一款 Office 服务器产品,可提供针对 Office 文件的基于浏览器的文件查看和编辑服务.Offic ...

  4. 还不错的MUI技术文档

    https://blog.csdn.net/xin724/article/details/81939176

  5. python搭建简单http文件服务器

    import SimpleHTTPServer import SocketServer PORT = 8000 Handler = SimpleHTTPServer.SimpleHTTPRequest ...

  6. A - Wall

    Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the ...

  7. js 拷贝树copytree

    希望能摆脱lodash的深拷贝

  8. 启动weblogic报错:string value '2.4' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/javaee

    启动报错: 原因:有人改动了web.xml的头 解决方法: 在web.xml中修改抬头为: <?xml version="1.0" encoding="UTF-8& ...

  9. angular 表单元素的验证清除问题

    项目中利用了前些时候写的弹出dialog的方式,验证方式用了控件angular-validation(http://www.cnblogs.com/FineDay/p/7255689.html) 验证 ...

  10. [cloud][OVS][sdn] Open vSwitch 初步了解

    What is Open vSwitch? Open vSwitch is a production quality, multilayer virtual switch licensed under ...