strtok函数及其实现
头文件:#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函数及其实现相关推荐
- 恶心的C语言strtok函数
从C#.JAVA到C ,让我觉得像是从公产主义社会回到了原始社会,不顺手,所以很心里憋气!!! 函数名: strtok 功 能: 查找由在第二个串中指定的分界符分隔开的单词 用 法: char ...
- C和指针之字符串strtok函数
1.strtok函数 头文件:#include <string.h> 定义函数:char * strtok(char *s, const char *delim); 函数说明:strtok ...
- 【摘录】C语言中利用 strtok函数进行字符串分割
C语言不像Java,Php之类的高级语言,对象中直接封装了字符串的处理函数.C语言中进行普通的字符串处理也经常会让我们焦头烂额--不过好在C语言 中还是提供了像strtok这样功能强大的字符串处理函数 ...
- bob-tong 字符串函数之Strtok()函数
https://www.cnblogs.com/Bob-tong/p/6610806.html Strtok()函数详解: 该函数包含在"string.h"头文件中 函数原型 ...
- C/C++根据特定字符分割字符串、读取文件去掉逗号等特定字符、strtok()函数详解
字符串分割情况 读取文件时,C++识别的是空格和换行符,但有时候文件是以符号分割的,如逗号等 字符串本身含有特殊符号,如逗号,@等 strtok()函数 strtok()函数能够按照特定的字符分解字符 ...
- C语言strtok()函数:字符串分割
1.头文件:#include <string.h> 2.定义函数:char * strtok(char *s, const char *delim); 分解字符串为一组字符串.s ...
- strstr函数和strtok函数的使用
目录: strstr函数的使用 模拟实现strstr函数 strtok函数的使用 strstr函数定义:strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串.如果是,则该 ...
- c strtok函数用法
strtok函数用于分割字符串,原型如下: char *strtok(char *str, const char *delim); str为指向欲分割的字符串,delim为分隔符,实例如下: #inc ...
- strtok函数的使用
函数形式: #include <string.h> char *strtok(char *str, const char *delim); 作用: 根据某个定界附,将字符串分解成多个部分. ...
最新文章
- 合肥将全力打造“城市超脑” 创建智慧城市典范
- quartz 报错:java.lang.classNotFoundException
- .net程序员的盲点(一):参数修饰符ref,out ,params的区别
- 一个判断字符串是否是数字的正则表达式
- 查询指定目录下的文件中是否包含指定字符串
- linux绑定硬件的软件吗,Linux下安装的硬件方法
- SAP License:特殊采购类型-寄售及其结算
- 5.1linux_ubuntu常见安装问题
- logback日志框架的简单使用
- Java Web开发实战(一)—JDK安装及环境变量配置
- c语言考试笔试技巧,全国二级C语言,要考试了这些技巧你知道么?
- CHIP-seq流程学习笔记(7)-热图软件 deeptools
- 这几天心里颇不宁静,采的不是信号,而是寂寞
- xmind可以画流程图吗_怎样用XMind方便地制作流程图
- Unity3D--加载界面、开始界面
- 赛码练习编程题后台 动态规划——上台阶
- 4、Screenshot-adb基本命令-Android
- 计算机错误800,win10系统安装出现0x800700B7错误代码的技巧
- 内网安装ntpdate时间同步工具
- TDSQL是什么:腾讯如何打造一款金融级分布式数据库
热门文章
- kafka消息存储机制和原理
- Chrome升级后不能访问任何网站和自身设置
- 什么是DHCP?为什么要用DHCP?(中科三方)
- MySQL的二叉树、平衡二叉树、2,3查找树、B树、B+树索引
- arcgis怎么关联excel表_ArcGIS如何将表连接到空间数据上
- vue3.0在线编辑器codemirror开发
- 利用七牛云如何上传图片制作外链?
- 【模型库】龙门铣床三维模型(具有x_t通用格式)
- [JavaSE] 数据类型(变量、整形、长整型、双精度浮点、单精度浮点、字符、字节)
- WASC Threat Classification 安全威胁分类