C语言常用字符串、内存函数的实现

我在后面附上了所有的源码

模拟实现函数的总结:

1.模拟实现的首先我们要了解函数的功能

2.实现函数需要的参数以及返回类型

3.尽量不要使用局部变量的地址作为函数的返回类型

4.对任意类型的数据进行操作可以转化为void*后在强制转化为char*

1.求字符串长度

strlen

实现strlen函数相对简单

法一:是利用count计数循环,找到’\0‘,来确定字符串的长度

法二:利用递归的思想,每次分解问题都+1,找到最后一位为’\0‘

法三:利用char*指针不断循环找到'\0',然后指针与指针相减的结果就是元素个数

 

2.长度不受限制的字符串函数

strcpy

1.首先我们用assert进行断言,防止空指针作为参数传入,将源字符用const修饰防止不经意间的修改

2.我们创建一个指针来记录目标地址的首地址

3.通过循环不断将源字符串的数据赋值给目的字符串

4.可以将*Sur != '\0'作为循环条件,当不满足条件时,说明元字符串已经完全赋值个目的字符串

 

strcat

1.首先我们用assert进行断言,防止空指针作为参数传入,将源字符用const修饰防止不经意间的修改

2..创建一个指针来记录目标地址的首地址,防止最后指向目的字符串的指针丢失

3将源字符串添加到目的字符串的末尾,我们要先找到目的字符串的末尾,

4.当我们找到的字符串的末尾后直接将源字符串的元素赋值

5.赋值后返回我们记录目的字符串的原地址。

 

strcmp

1.首先我们用assert进行断言,防止空指针作为参数传入,将源字符用const修饰防止不经意间的修改

2.对比字符串,我们是对单个字符的比较,来决定大小。

3.首先我们先判断俩个字符是否相等,不相等然后比较大小,若是相等则直接+1,跳向下一个字符

 

3.字符串查找

strstr

1.先判断str2是否为空字符串,空字符串是任何源字符串的字串

2.一共有三个指针,俩个个指向主字符串,一个指向次字符串,

我们先思考一下,我们在判断次字符串是否为主字符串的字串时可能遇到的情况

        1.直接一一对应,那么返回直接返回主字符串

        2.开始没有找到,在中间,或其他位置,找到并且一一对应

        3.找到之后,对应上一个或俩个又发现并不完全对应

3.1、2俩种情况相对处理任意,第三中情况,就需要我们的三指针了,当对应上以后一个指针记录上当前的位置,如果再次对应,则++,并且查看是否次字符串是否结束,否则重新回到记录的上次对应位置开始++后再次判断是否对应。

4.内存操作函数

memcpy

1.首先我们用assert进行断言,防止空指针作为参数传入,将源字符用const修饰防止不经意间的修改.

2.与strcpy相似,我们先记录目的字符串的地址,然后以需要改变的字节数为控制循环的条件,因为我们使用void*接受的指针,在赋值的时候我们需要将其强制转化为char*指针,

 

memmove

 

1.相比memcpy,memmove更加强大,安全,它可以说是memcpy的升级

2.他的作用是可以将数组元素复制重负的地方也可以复制到目的

3.下面这种情况使用memcpy将蓝色的复制到红色地址的结果就不会是123,而是121

我们为了解决这种问题,可以从3复制到1,然后就不会覆盖到未复制额数据

 

这种情况应该直接正数着赋值

 

 

memcmp

 

1.我们先分析循环的条件,首先需要对比的字节数,然后如果俩个字节相等则下一个,否则对比出结果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山山人行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值