书接上回,今天继续来探讨我们的字符串函数
今天的主角包括:strtok 函数、strstr 函数、strerror 函数
一 . strtok 函数
strtok 函数是专用于切割字符串中的特定符号的,且我们通过 Cplusplus 上的查看我们可以提取出几个重点:
(1)第一个参数 str 指向一个字符串,包含了由 0 个或者多个字符组成的字符串
(2)sep 参数指向一个字符串,定义了用作分隔符的字符集合。
这两点是什么意思呢?例如我们一个网站:qgzdz//yyxzz@csdn.com,要将其变成一个纯字符串,我们需要去掉当中的 “ // @ . ” ,我们的参数 str 就是这个网站,而参数 sep 就应该是一个包含这三个字符的字符串
(3)当我们的 strtok 函数找到一个标记的字符时,会将其修改为 ‘ \0 ’ ,并返回这段字符串的起始地址(注:strtok 函数会改变被操作的的字符串,所以我们一般都会创建一份临时拷贝用来被 strtok 切割,而不是用原字符串)
例如:我们还是以上面的 qgzdz//yyxzz@csdn.com 为例,当我们找到第一个标记字符时,会修改他变成这样:qgzdz\0,然后会返回起始字符 q 的地址,然后就是从上一个 \0 的位置开始,找到下一个标记字符,然后 yyxzz\0 返回 y 的地址......
注意:一般来说,我们函数中创建的一个东西,出函数就会销毁,但是这个strtok函数,会记住我们上一次运行时的起始地址,出函数不会直接销毁,下一次依然可以读取,这就说明我们这个strtok函数中大概率是有 static 关键字修饰的,这个 static 关键字之前是提到过的,不过具体在那一期我记不太清了,其作用就是修饰我们的临时变量,让其在出函数时不会被销毁,下一次进去函数还可以直接使用的
由图可得:
(1)strtok 函数的第一个参数不为 NULL 时,函数将找到字符串中第一个标记字符,并且会保存其位置
(2)strtok 函数的第一个参数为 NULL 时,函数将在同一个字符串中被保存的位置开始,遍历查找下一个标记字符
(3)若是字符串中不存在更多标记字符,则直接返回 NULL
有朋友可能发现了,这也太麻烦了吧,我们岂不是每次都得知道这个字符串分割成了几段,我们每段都需要去打印,这代码一点也不智能,太笨重了。唉,你看,你又急,这不还没完呢嘛
这个代码本身并不是这样去使用它的,上面我只是为了帮助诸君更好的更清晰的理解,才以这种分段的方式呈现出来,由上面的三个特点我们可以联想到C语言中有一个语句可以完美契合这个函数的分段需求,那就是 for 循环,如图:
二 . strstr 函数
(1)strstr 函数的使用
strstr 函数是专用于找一个子字符串在另一个字符串中是否出现,由我们在 Cplusplus 上的查询可知,如果找到了,就返回这个子字符第一次出现的地址,若没找到,就返回空指针 NULL
这个函数的使用非常简单,我们用普通数组和指针的方式都能实现,本质上是一样的,没啥说的
(2)strstr 函数的模拟实现
解析:
strstr 函数模拟实现的重点是我们需要考虑到一种特殊情况:在 “ cccde ” 中找 “ ccde ” 的这一类的情况,当我们对比到第三个字符串才发现不相等的时候,我们就需要回头重新比较,这是思想上比较难逾越的一个点,所以我们在比较移动的时候不应该直接对 str1、str2 进行移动,而是在一开始就创建两个新的指针变量,用这两个代替 str1、str2 移动,并且还需要再创建一个指针变量,因为我们对比到第一个相同字符的时候需要在这个位置留下一个指针,如果全部匹配成功,它就作为我们的返回值,这是 strstr 这个函数的特性
三 . strerror 函数
大家可以知道,这个 strerror 函数是用于将错误码对应的错误信息的字符串地址返回过来,且该函数的头文件依旧是:
#include <string.h>
这是它返回数字 1~10 所代表的错误码信息
这里给诸君演示一下它的使用效果:
fopen 打开文件失败会返回一个空指针,所以我们这样子去判断。想要成功打开呢,我们只需要在代码文件对应的位置去新建一个文本文档即可,当然注意,一定要打开隐藏的文件后缀显示,我这里的文件名是:test,并不是 test.txt,txt 只是它的文件后缀
这里再给诸君拓展一个知识点,perror 函数,这个函数就像图中展示的那样,可以直接将错误信息展示出来,用法、格式已经给大家在代码上表达出来了,这个很简单,就不过多赘述了
注意:这一点只适用于库函数,只有库函数在发生错误的时候会将错误信息放在 error 里
OKK,有关字符和字符串函数的讲解我们基本上就讲完了,当然了,库函数是讲不完了,这里只是给大家列举了几个常用的,大家以后遇到不认识的库函数,只需要在我们的 Cplusplus 网站上去查询学习即可。最后希望诸君动动发财的小手,如果此篇文章对你有所帮助的话,不妨点点赞点点关注噢!就这样吧,咱们下期再见!与诸君共勉!!!