今天小编和大家分享C语言中字符函数和字符串函数这一部分知识
话不多说,我们马上开始。
1.strlen
(1)strlen我们已经很熟悉了,是一个库函数,专门来计算字符串的大小,碰到\0后停止;
(2)strlen的模拟实现(递归实现)
比如说我们要计算‘boy’这个字符串的大小
我们可以用递归的思想这样如下分析:boy = oy+1;
boy = y + 1+1;
实现又复杂一步一步简化的过程。
2.strcpy
(1)注意事项:原字符串必须以\0结束;
目标字符串也需要有\0
目标空间必须足够大
目标可修改
作用:简单来解释就是将原数组的内容copy到目标数组中去;
(2)
这里利用的就是对后置++的理解,后置++运算是先使用后++,因此,将解应用str2的值赋值给解应用str1之后在将指针的位置向后迁移一位,巧妙地实现了函数,形式很简单。
3.strcmp
(1)对两个字符串数组进行比较;
它的比较方式是,如果字符字符相同就比较下一组,如果不相同,就比较字符的ASCII值。
4.strcat
(1)作用简单来说就是在原数组的基础上进行追加
(2)注意事项:原字符串必须以\0结束;
目标字符串也需要有\0;因为要知道追加从哪里开始
目标空间必须足够大
目标可修改
模拟实现如下:
5.关于安全行更高的strncpy,strncmp,strncat;
如果我们去c++网站去观察这几个函数与原来相似函数的区别,就会发现这几个函数限制了copy或者追加或者比较的字符元素,这样在使用前我们就多一步思考,有效避免了越界访问这种情况的出现。
(2)关于模拟实现
6.strstr
(1)strstr的使用,作用:
(2)了解了strstr怎么使用之后,我们可以模拟实现一个自己的strstr函数来加深理解,小编的这种方式相对复杂但好理解,适合初学者。
<1>当我们简单的去寻找的时候,首先明白str1与str2指向的值判读相等是多次,因此使用while合适不过,但我们需要返回str1于str2相等的第一个地址,因此我们在匹配过程中需要记录开始匹配的位置,那我们需要再创建s1,s2起到遍历两组字符数组的作用
<2>但是如果是下面这种情况,我们就会发现,当第一组bbb匹配不上时,s1要重新回到指向第二个b的地址的位置,那我们就需要第三个字符变量cur记录匹配的位置。
于是借助下面成型的代码,我们可以理解一下其根本逻辑,当cur不为/0的时候,也就是说从str1位置开始,如果是s1不等于s2就会从第二个元素开始比较,省去了条件语句的比较过程,
当s1= s2就开始比较,当s2比完后出现\0;返回开始匹配时cur的地址
另外还有一类特殊情况我们需要考虑到
这个时候s1,s2均为/0作为while循环的判断条件,省去了一些复杂步骤
7.strtok
(1)str指向的是字符串,sep指的是分隔符,以 . @为例
那这个函数有什么用呢?
简单来说它可以将一段字符串根据分隔符的位置分割成多段字符串
8.strerror
简单来说strerror可以将对应错误码的信息显示出来
它和错误码的结合,让博主想起了perror的使用,感觉如出一辙。