问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言字符串处理函数详解:使用与模拟实现

创作时间:
作者:
@小白创作中心

C语言字符串处理函数详解:使用与模拟实现

引用
CSDN
1.
https://blog.csdn.net/2302_82004664/article/details/136743956

本文详细介绍了C语言中字符串处理函数的使用和模拟实现,包括strlen、strcpy、strcat、strcmp、strstr等常用函数,以及strncpy、strncat、strtok、strerror等扩展函数。文章内容详尽,包含了函数的使用方法、注意事项和具体的代码实现,适合C语言初学者学习和参考。

本文包括以下几部分内容:

一.strlen、strcpy、strcat、strcmp函数的使用和模拟实现

二.strncpy、strncat、strnmp函数的使用

三.strstr函数的使用和模拟实现

四.strtok、strerror、perro函数的使用

函数的模拟实现可以帮助我们更加深刻地理解函数,方便我们去使用。今天来介绍有关于字符的相关函数,希望对大家有所帮助。

一.strlen、strcpy、strcat、strcmp函数的使用和模拟实现

1.strlen函数的使用和模拟实现

1.1 strlen函数的返回值与传参

这里有几个注意事项:

  1. 返回值为size_t类型(无符号整型)所以在比较大小时要注意,例如:

此时结果为无符号的整形为3所以打印的是大于零,而不是小于零,所以对于size_t类型的值进行运算时要注意符号

  1. 字符串必须要以"\0"结束否则会越界访问

  2. 要包含<string.h>的头文件

使用则比较简单将字符数组或字符传入即可

1.2 strlen的模拟实现

这里有三种方式,其中两种要创建临时变量而剩下的一种则不用创建临时变量

1.2.1 计数器的方式实现

这里使用while循环不断使指针向后移动,直到遇到字符串0时结束,将数值返回

1.2.2 指针-指针的方式实现

这里将字符的指针传过来后新建一个指针将其接收,然后将一个指针找到’\0’后让两个指针相减就能得到中间的字符个数

1.2.3 不创建临时变量(函数的递归)

这里通过函数的递归实现如果不是’\0’则加1并再次调用自身可以避免去创建临时变量

2.strcpy函数的使用和模拟实现

2.1 strcpy的使用

这个函数可以实现字符串的拷贝,其中2为要拷贝到的地方,3为要拷贝的内容,1为返回类型

这个函数要注意:

  1. 源字符串必须要以’\0’结束,因为拷贝的内容放到’\0’后

  2. 拷贝的目标空间要足够大,并且可以修改

使用方法很简单但这里我们打开调试观察它是如何放置的

这里可以发现这个函数将提供的字符串前面替换掉让后将’\0’也拷贝过来了,了解到这我们就可以去模拟实现了

2.2 strcpy的模拟实现

这里我们可以看看一串代码是如何从写出来到后续优化的

调试结果:

可以发现这样也可以满足要求了但还可以优化一下

这里优化了两个地方:

  1. 要拷贝的内容不能被更改所以加上const限制

  2. 进行断言防止传过来的是空指针

但还可以改进:

这里创建ret是为了将str1将字符的第一个数组记录下来,当后续完成时将其返回

这里的while语句是将之前的合并到一起了,这里++的优先级比*高所以要用后置++,当str2为"\0"(ASCLL码值为零)while循环会结束

3.strcat函数的使用和模拟实现

3.1 strcat函数的使用

简单来说strcat函数的用来连接字符串的

这里要注意:

  1. 目标空间要足够大,并且可以修改

  2. 两个字符串都要以"\0"结尾,其实就是要知道从哪里开始,从那里结束

3.2 strcat函数的模拟实现

  1. 这里将两个不为NULL改为&&其原因是NULL的ASCLL为0,如果两个有一个为0就会断言,将其放在一起判断也是可以的

  2. 这里通过while循环找到"\0"

  3. 和上面一样,将str2地值赋给str1

4.strcmp函数的使用和模拟实现

3.1 strcmp函数的使用

这个函数之前提到过,比较两个字符串上对应的ASCLL码值如果第一个字符串大则返回>0的数,反之则是<0的数,相等返回0

3.2 strcmp函数的模拟实现

while循环判断两者是否相等,如果相等且有一个是"\0"直接返回0不相等则进行if判断,进行返回

也可以写成:

这样返回值的就不是1,0,-1这三个数了而是>0,0,<0的数了

二.strncpy、strncat、strnmp函数的使用

  1. strncpy、strncat、strnmp介绍

这几个函数都有一个共同的特点:在原来的函数上多了一个参数,而这个参数是对这几个函数进行限制的

  1. strncpy、strncat、strnmp使用

2.1 strncpy的使用

这里可以发现如果拷贝的字符串小于num会在后面追加0直到num个

2.2 strncat的使用

2.3 strncmp的使用

三.strstr函数的使用和模拟实现

1.strstr函数的使用

简单来说在字符串中查找另一个字符串是否出现,如果出现就返回出现第一次的位置,否则就返回空指针

2.strstr函数的模拟实现

这里处理这种情况:

在abbbcdef 找 bbc 要多次匹配的情况

这里通过两个while嵌套的循环来解决这个问题

外循环当cp将字符串str1遍历完结束并创建s1,s2指针分别指向str1现在遍历的位置和str2的头部

内循环如果此时s1和s2指向的字符一样两者同时++进行接下来的判断

不相同则跳出此次循环是cp+1并再次进行循环

后续补充为如果两者有任意的一个判断完了跳出循环返回结果,其中如果将s2判断完了就代表找到了返回此下时指向的位置即cp,否则就返回空指针

  1. 这里是一个特殊场景的处理:传入的是空字符串时直接返回

  2. 找不到时返回空指针不能直接打印就要进行判断

这里的实现方法仅供参考,还有很多可以优化的地方

四.strtok、strerror函数的使用

  1. strtok函数的使用

这里先给大家看一下效果

不难理解,就是将字符串按照分隔符进行分割,而再次调用时不需要传入原本的参数,传入空指针即可

这时巧妙地将判断条件放入到for循环中去进行循环打印

  1. strerror、perro函数的使用

可以将错误信息返回的函数,需要包含<errno.h>头文件

例如这里打开文件的代码目录下并没有这个文件就可以使用strerror将错误信息返回

与其相似的函数perror会优先将输入内的字符串打印后加上:在打印错误信息

以上就是文章的全部内容,希望对大家有所帮助,后面是全部的代码,也可以去gitee自取

大家加油!!!

C语言函数可以在legacy.cplusplus.com查看学习

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号