头文件:#include <string.h>

定义函数:char * strtok(char *s, const char *delim);

函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当

strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需

给予参数s 字符串,往后的调用则将参数s 设置成NULL。每次调用成功则返回下一个分割后的字符串指针。

返回值:返回下一个分割后的字符串指针,如果已无从分割则返回NULL。

下面看一个例子:

#include <string.h>

int main()

{

char s[] = "ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z";
    char *delim = "-: ";
    char *p;
    printf("%s ", strtok(s, delim));
    while((p = strtok(NULL, delim)))
        printf("%s ", p);

printf("\n");

return0;

}

执行结果为:

ab cd ef;gh i jkl;mnop;qrs tu vwx y;z 。

自己实现strtok函数:

#include<stdio.h>

//该程序的关键点在于定义了一个静态的字符指针,该指针用来记录分割后的字符串的首地址

//传入NULL,则表示继续处理静态指针指向的余下字符串

char *strtok(char *str, const char *delim)
{
        static char *src=NULL;                                         //记下上一次非分隔字符串字符的位置,详见图示
        const char *indelim=delim;                                  //对delim做一个备份

int flag=1,index=0;

//每一次调用strtok,flag标记都会使得程序只记录下第一个非分隔符的位置,以后出现非分隔符不再处理

char *temp=NULL;                                       //程序的返回值
 
        if(str==NULL)
        {
          str=src;                                               //若str为NULL则表示该程序继续处理上一次余下的字符串
        }
        for(;*str;str++)
        {
            delim=indelim;
          for(;*delim;delim++)
                {
                  if(*str==*delim)
                        {
                          *str=NULL;                    //若找到delim中感兴趣的字符,将该字符置为NULL
                          index=1;                         //用来标记已出现感兴趣字符
                          break;
                        }
                }
          if(*str!=NULL&&flag==1)
                {
                  temp=str;                              //只记录下当前第一个非感兴趣字符的位置
                  flag=0;  
                }
          if(*str!=NULL&&flag==0&&index==1)
                {
                 src=str;                                   //第二次出现非感兴趣字符的位置(之前一定出现过感兴趣字符)
                  return temp;
}
        }

src=str;

//执行该句表明一直未出现过感兴趣字符,或者说在出现了感兴趣的字符后,就没再出现过非感兴趣字符

return temp;
}

int main()

{

char s[] = "ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z";
    char *delim = "-: ";
    char *p;
    printf("%s ", strtok(s, delim));
    while((p = strtok(NULL, delim)))
        printf("%s ", p);

printf("\n");

return0;

}

strtok函数及其实现相关推荐

  1. 恶心的C语言strtok函数

    从C#.JAVA到C ,让我觉得像是从公产主义社会回到了原始社会,不顺手,所以很心里憋气!!! 函数名: strtok  功  能: 查找由在第二个串中指定的分界符分隔开的单词  用  法: char ...

  2. C和指针之字符串strtok函数

    1.strtok函数 头文件:#include <string.h> 定义函数:char * strtok(char *s, const char *delim); 函数说明:strtok ...

  3. 【摘录】C语言中利用 strtok函数进行字符串分割

    C语言不像Java,Php之类的高级语言,对象中直接封装了字符串的处理函数.C语言中进行普通的字符串处理也经常会让我们焦头烂额--不过好在C语言 中还是提供了像strtok这样功能强大的字符串处理函数 ...

  4. bob-tong 字符串函数之Strtok()函数

    https://www.cnblogs.com/Bob-tong/p/6610806.html Strtok()函数详解:   该函数包含在"string.h"头文件中  函数原型 ...

  5. C/C++根据特定字符分割字符串、读取文件去掉逗号等特定字符、strtok()函数详解

    字符串分割情况 读取文件时,C++识别的是空格和换行符,但有时候文件是以符号分割的,如逗号等 字符串本身含有特殊符号,如逗号,@等 strtok()函数 strtok()函数能够按照特定的字符分解字符 ...

  6. C语言strtok()函数:字符串分割

    1.头文件:#include <string.h> 2.定义函数:char * strtok(char *s, const char *delim);      分解字符串为一组字符串.s ...

  7. strstr函数和strtok函数的使用

    目录: strstr函数的使用 模拟实现strstr函数 strtok函数的使用 strstr函数定义:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该 ...

  8. c strtok函数用法

    strtok函数用于分割字符串,原型如下: char *strtok(char *str, const char *delim); str为指向欲分割的字符串,delim为分隔符,实例如下: #inc ...

  9. strtok函数的使用

    函数形式: #include <string.h> char *strtok(char *str, const char *delim); 作用: 根据某个定界附,将字符串分解成多个部分. ...

最新文章

  1. 合肥将全力打造“城市超脑” 创建智慧城市典范
  2. quartz 报错:java.lang.classNotFoundException
  3. .net程序员的盲点(一):参数修饰符ref,out ,params的区别
  4. 一个判断字符串是否是数字的正则表达式
  5. 查询指定目录下的文件中是否包含指定字符串
  6. linux绑定硬件的软件吗,Linux下安装的硬件方法
  7. SAP License:特殊采购类型-寄售及其结算
  8. 5.1linux_ubuntu常见安装问题
  9. logback日志框架的简单使用
  10. Java Web开发实战(一)—JDK安装及环境变量配置
  11. c语言考试笔试技巧,全国二级C语言,要考试了这些技巧你知道么?
  12. CHIP-seq流程学习笔记(7)-热图软件 deeptools
  13. 这几天心里颇不宁静,采的不是信号,而是寂寞
  14. xmind可以画流程图吗_怎样用XMind方便地制作流程图
  15. Unity3D--加载界面、开始界面
  16. 赛码练习编程题后台 动态规划——上台阶
  17. 4、Screenshot-adb基本命令-Android
  18. 计算机错误800,win10系统安装出现0x800700B7错误代码的技巧
  19. 内网安装ntpdate时间同步工具
  20. TDSQL是什么:腾讯如何打造一款金融级分布式数据库

热门文章

  1. kafka消息存储机制和原理
  2. Chrome升级后不能访问任何网站和自身设置
  3. 什么是DHCP?为什么要用DHCP?(中科三方)
  4. MySQL的二叉树、平衡二叉树、2,3查找树、B树、B+树索引
  5. arcgis怎么关联excel表_ArcGIS如何将表连接到空间数据上
  6. vue3.0在线编辑器codemirror开发
  7. 利用七牛云如何上传图片制作外链?
  8. 【模型库】龙门铣床三维模型(具有x_t通用格式)
  9. [JavaSE] 数据类型(变量、整形、长整型、双精度浮点、单精度浮点、字符、字节)
  10. WASC Threat Classification 安全威胁分类