C语言字符、字符串函数(strlen、strcpy、strcat、strcmp、strstr的使用及模拟实现和strncpy、strncat、strnmap、strtok、strerror的使用)

在这里插入图片描述

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

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

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

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

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

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

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

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

1.1strlen函数的返回值与传参

在这里插入图片描述
这里有几个注意事项:
1.返回值为size_t类型(无符号整型)所以在比较大小是要注意,例如:
在这里插入图片描述
此时结果为无符号的整形为3所以打印的是大于零,而不是小于零,所以对于size_t类型的值进行运算时要注意符号
2.字符串必须要以"\0"结束否则会越界访问
3.要包含<string.h>的头文件

使用则比较简单将字符数组或字符传入即可
在这里插入图片描述

1.2strlen的模拟实现

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

1.2.1计数器的方式实现

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

1.2.2指针-指针的方式实现

在这里插入图片描述

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

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

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

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

2.1strcpy的使用

在这里插入图片描述
这个函数可以实现字符串的拷贝,其中2为要拷贝到的地方,3为要拷贝的内容,1为返回类型
这个函数要注意:
1.源字符串必须要以’\0’结束,因为拷贝的内容放到’\0’后
2.拷贝的目标空间要足够大,并且可以修改
在这里插入图片描述

使用方法很简单但这里我们打开调试观察它是如何放置的
在这里插入图片描述
这里可以发现这个函数将提供的字符串前面替换掉让后将’\0’也拷贝过来了,了解到这我们就可以去模拟实现了

2.2strcpy的模拟实现

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

在这里插入图片描述
调试结果:在这里插入图片描述
可以发现这样也可以满足要求了但还可以优化一下
在这里插入图片描述
这里优化了两个地方:
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介绍

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

2.strncpy、strncat、strnmp使用
2.1strncpy的使用

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

2.2strncat的使用

在这里插入图片描述

2.3strncmp的使用

在这里插入图片描述

三.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循环中去进行循环打印

2.strerror、perro函数的使用

在这里插入图片描述
可以将错误信息返回的函数,需要包含<errno.h>头文件
在这里插入图片描述
例如这里打开文件的代码目录下并没有这个文件就可以使用strerror将错误信息返回
在这里插入图片描述
与其相似的函数perror会优先将输入内的字符串打印后加上:在打印错误信息
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

大家加油!!!

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值