当前位置: 首页 > news >正文

C语言:strtok的注意事项及模拟实现

一、strtok的注意事项

        1、头文件为:<string.h>

        2、函数声明为:char* strtok(char* str, const char* delimiters);

        3、作用:将一串字符串通过分隔符分割开来

        4、第一次调用需要一个字符串作为 str 的参数,后续可用空指针

        5、返回的是 char* 类型的指针,指向被分割出来的这一段字符串的起始位置

二、strtok的模拟实现

#include <stdio.h>
#include <assert.h>char* my_strchr(const char* str, int ch)
{assert(str);//用断言判断 str 是否为空指针while (*str && (*str != (char)ch))//从左向右查找是否有匹配的字符{str++;}if (*str == (char)ch)//如果找到了,返回此时 str 的地址{return (char*)str;}return NULL;//如果找不到,返回空指针
}char* my_strtok(char* str, const char* deli)
{assert(deli);//用断言判断 deli 是否为空指针static char* state = 0;if (str)//判断是否为空指针{state = str;}while (*state && my_strchr(deli, *state))//跳过分隔符{state++;}if ('\0' == *state)//判断 state 是否到句末{return NULL;}char* start = state;//保存起始位置while (!my_strchr(deli, *state))//查找分隔符{state++;}//判断是否是因为遇到分隔符而跳出循环if (*state != '\0'){*state++ = '\0';//将当前指针所指向的值赋为 '\0',并让 state 指向后一个值}return start;//返回起始位置
}int main()
{char str[] = "zhang__san,li__si...";char deli[] = ",_.";char* p = NULL;for (p = my_strtok(str, deli); p != NULL; p = my_strtok(NULL, deli)){printf("%s\n", p);}return 0;
}//结果为:
//zhang
//san
//li
//si

ps:若有不足,望指出

^_^感谢^_^

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 集成电路学习:什么是Bootloader启动加载程序
  • 数据结构:树
  • selenium使用指南
  • 在centos系统中kill掉指定进程
  • Vue3 ref 和 reactive 的区别
  • Linux操作文件和文件夹的常用基础命令
  • RTC相关
  • vmware解决虚拟机空间占用不断增大问题
  • Eclipse 自定义字体大小
  • Android 模拟器的简单操作
  • 【算法】演员~评论家方法
  • 集成电路学习:什么是DAC数模转换器
  • 巧用 HTML 列表:<ul>、<ol>、<dl>的实用指南
  • 使用Python写贪吃蛇游戏
  • 计算机网络概述(分组延时、丢失和吞吐量)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • CSS 专业技巧
  • ES学习笔记(12)--Symbol
  • js数组之filter
  • LeetCode18.四数之和 JavaScript
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • maven工程打包jar以及java jar命令的classpath使用
  • Solarized Scheme
  • spring security oauth2 password授权模式
  • Vue小说阅读器(仿追书神器)
  • 闭包--闭包作用之保存(一)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 七牛云假注销小指南
  • 强力优化Rancher k8s中国区的使用体验
  • 如何学习JavaEE,项目又该如何做?
  • 用简单代码看卷积组块发展
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​力扣解法汇总946-验证栈序列
  • #、%和$符号在OGNL表达式中经常出现
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • $.ajax()方法详解
  • (3)STL算法之搜索
  • (4)事件处理——(7)简单事件(Simple events)
  • (7)STL算法之交换赋值
  • (9)目标检测_SSD的原理
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (分布式缓存)Redis分片集群
  • (七)Knockout 创建自定义绑定
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET 材料检测系统崩溃分析
  • .net下的富文本编辑器FCKeditor的配置方法
  • .NET学习教程二——.net基础定义+VS常用设置