千家信息网

使用C语言如何实现strtok和字符串分割函数

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"使用C语言如何实现strtok和字符串分割函数",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"使用C语言如何实现strtok和字符
千家信息网最后更新 2026年11月01日使用C语言如何实现strtok和字符串分割函数

这篇文章主要为大家展示了"使用C语言如何实现strtok和字符串分割函数",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"使用C语言如何实现strtok和字符串分割函数"这篇文章吧。

一、strtok的基本使用


解析:函数大概说了以下几点

1.str就是我们要去拆分的字符串,注意,我们会对该字符串进行更改,所以一般我们会拷贝一份然后去分割拷贝的那份字符串!!

2.delimiters 就是我们定义的切分的符号,假如想要用空格作为分割符,我们就可以定义 char delimiters [NUM]=" " ** 请注意里面放了一个空格的呀!!
此处NUM可以自己定义大小,这里的delimiters 可以有多种分割方式。

3.strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将会有一个设置保存他修改了的下一个位置的地址,如"wo ai ni",其中若用空格作为分隔符就会将空格处换成*"\n"**,返回w的位置,并且函数内部保存a的位置。

4.strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置(即上面所说的位置w)开始,查找下一个标记。

5.如果字符串中不存在更多的标记,则返回 NULL 指针。

分析完后我们看一段代码,对一段字符串做一个切割

int main(){        char a[] = "wo shi bo zhu";        char* retArr[10];        retArr[0] = strtok(a, " ");        int i = 1;        while (retArr[i++] = strtok(NULL, " "));        for (int i = 0; i < 10; i++)        {                printf("%s ", retArr[i]);        }        return 0;}

二、strtok的实现

分析:进来的情况大致分为两种,str为空和不为空的情况,函数第一次调用的话因为我们要记录下一次进来时的位置,我们选择在函数内部创建一个static的静态变量,static char* p_last = NULL ,并且第一次我们设置为NULL,函数又分为两种情况,我们切割的话用tmp指针往后走,str指针保存当前位置,所以tmp指针走到\0时我们还要将p_last处理成NULL,其他的情况(str串还能被delimiters分隔)我们就在函数内部把*tmp = '\0',再将p_last处理为下一次进来的位置即可。

例子:

int main(){        char a[] = "wo ai ni";        char* retArr[10];        retArr[0] = my_strtok(a, " ");        int i = 1;        while (retArr[i++] = my_strtok(NULL, " "));        for (int i = 0; i < 10; i++)        {                printf("%s ", retArr[i]);        }        return 0;}

第一次分割

第二次分割

第三次分割

第四次切割

实现代码如下,有需要自取:

char* my_strtok(char* str, char* delimiters){        //str传NULL的时候如果上次有记录,则用上一次的下一个位置,不然就为NULL    static char* p_last = NULL;        if (str == NULL && p_last == NULL)                return NULL;        if (str == NULL)        {                //用来返回的当前位置                str = p_last;                char* tmp = p_last;                int len = strlen(delimiters);                while (*tmp)                {                        for (int i = 0; i < len; ++i)                        {                                if (*tmp == delimiters[i])                                {                                        p_last = tmp+1;                                        *tmp = '\0';                                        return str;                                }                        }                        //走到这里表示当前的tmp没有在delimiters中能找到的                        tmp++;                }                //走到这里就是自己走到斜杠\0的位置,就要将p_last 设置成为NULL                char* ret = p_last;                p_last = NULL;                return ret;        }        else        {                char* tmp = str;                int len = strlen(delimiters);                while (*tmp)                {                        for (int i = 0; i < len; ++i)                        {                                if (*tmp == delimiters[i])                                {                                        p_last = tmp+1;                                        *tmp = '\0';                                        return str;                                }                        }                        //走到这里表示当前的tmp没有在delimiters中能找到的                        tmp++;                }                //找到了,找不到                char* ret = p_last;                p_last = NULL;                return ret;        }}

以上是"使用C语言如何实现strtok和字符串分割函数"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

函数 位置 字符 字符串 情况 指针 空格 语言 内容 就是 标记 第一次 篇文章 代码 参数 拷贝 更多 分析 处理 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 上海喔噻互联网科技有限公司 江苏根荣互联网科技 万易互联网科技 互联网科技公司怎么样 联恩商钥互联网科技有限公司 广州优美互联网科技 阿里巴巴算科技企业还是互联网 崇明区互联网教育科技诚信经营 移动互联网年度科技创新 米聚互联网科技南京有限公司排面 长沙茂晟互联网科技有限公司 华中科技大学互联网的牛人 锡山区互联网智能科技产品供应 银行科技岗属于互联网吗 福仕德教育科技互联网 广西泛欧互联网科技有限公司 中国主要互联网科技公司 互联网 科技节活动 微视频大赛 小牛互联网科技有限公司地址 新华互联网科技 互联网最新的科技有限公司 互联网与科技金融数据 奇酷互联网科技 国外互联网科技网站 多迪互联网科技有限公司 南平创想时代互联网科技有限公司 广东工业互联网大赛深圳学泰科技 2021世界互联网领先科技成果发布 互联网科技新闻
0