字符串函数的讲解——怎么用和怎么写

本文介绍了字符串函数strlen、strcpy、strcat和strcmp的基本概念、用途及如何模拟实现。strlen用于计算字符串长度,其他函数涉及字符串复制、追加和比较,以及ASCII码在比较中的作用。
摘要由CSDN通过智能技术生成

目录

今天,,我们来谈一谈关于字符串函数的话题:有哪些字符串函数,他们有什么用,怎么模拟实现。

strlen

我们开始下一个strcpy

下一个strcat

下一个strcmp


今天,,我们来谈一谈关于字符串函数的话题:有哪些字符串函数,他们有什么用,怎么模拟实现。

strlen

我们知道strlen这个函数,他是一个专门计算字符串个数的函数,他和sizeof最大的区别就是sizeof只计算字符串所占空间的大小,而strlen这个函数他不看空间的大小,只看在哪里遇到'\0',因此,这个字符串一定要有'\0',不然的话,strlen函数就会一直访问下去一直到遇到'\0'为止,那他访问到什么地方就不知道了。但是有一个小细节就是其实strlen的返回值不是int 而是size-t

现在我们来说strlen的模拟实现,strlen的实现大概有三种:一。计算器法。二,指针减指针法。三,函数递归法。

一。计算器,其实很简单,就是我们传一个字符串过去,用一个指针指向第一个字符,判断是不是'\0',如果不是就++,(这个是strlen实现的核心思想)访问后面的字符,把向后了几个记下来。就可以实现了。

二,指针减指针

我们在传参的时候可以有首元素的指针,因此我们就需要找到最后一个'\0'的指针就行了。

是不是和上面的有点像,其实strlen的核心思想就是用一个指针判断是不是'\0',再++。

三,函数递归

我在这里叫函数递归,你可能不会有影响,但是我们换一个名字叫,不创建临时变量计数器。

不创建临时变量计数器这个名字更常见,但是他的本质就是函数递归,

我们展开递归

我们就可以看懂了。

其实,递归分二步,第一步,展开,第二步,回去。

我们开始下一个strcpy

看得懂不,看不懂就听我来解释一下,首先strcpy这个函数有二个参数(我发现了字符串函数中有二个参数,第一个参数就是被操作参数,第二个就是要操作参数。比如这个函数就是拷贝函数,就是把第二个参数拷贝到第一个函数里面去。)但是有一个小细节,就是这个'\0'会不会拷贝过去呢,你们想一想。答案是会,为什么呢。因为我们打印arr1时,只有abcdefj,后面的xxxxxxx没了,因此字符串就在'\0'这里停了下来。

额,用法我们肯定都会使用,因为太简单了。那怎么实现呢。

拷贝吗,一个一个拷贝过去就行了。所以我们先拿二个指针(dest和str)接收数组名arr1和arr。我们是把后面的放入前面。因此,就需要把指针str的值赋给dest,就这样写

但是,我们打印出来就发现后面还有xxxxx,所以我们的'\0'就没有赋过去。所以我们怎么优化呢。所以我们就想,我们先判断再赋值,我们想要先赋值再判断。那怎么办,我们就想到。我们直接在()里面赋值行不行。那我们把这个拿进去了,怎么判断啊。我们是str是不是判断'\0',那'\0'是不是为假的意思,诶,刚刚好所以我们可以这样优化我们的代码。

下一个strcat

这个是字符串追加函数,我们按照上面说的(第一个参数是被操作函数,第二个是操作函数来判断,这个函数的作用)是不是就是把第二个参数的字符,加到第一个字符的后面。

这个就是用法,那怎么实现呢,我们上面写了strcpy函数的话,这个就很容易想到,就是二个指针嘛,一直赋值,一直到'\0'就停下来嘛。是不是很简单。但是不同的是,我们要先找到arr1的最后一个字符的地址。

我们就可以用上面的老套路了,++嘛,加的'\0'停下来。

这个就是strcat,但是这个函数可以追加自己吗。

这个不是我写的函数,这个是库函数strcat,这说明追加不了吧。那我们想要追加自己怎么办呢。你们先思考我们后面说。

下一个strcmp

这个函数就是比较函数了,把str1和str2比较。

如果1<2就返回小于0的数,1>2返回大于0的数。等于就返回0。

这个就是这个函数的性质。但是我们讲细节一点,这个返回值他有没有什么规律,

他怎么比较是看长度,还是看字符的ascll码。

首先就是返回值

我尝试了几组发现,这个值不是1就是0还有-1,没有别的值了。这个应该不是巧合。那为什么呢,但是我换一个编辑器,他返回各种各样的值。这又是为什么。

二看长度函数ascll这个我们可以直接测试,结果发现是ascll,他是顺序是先比较如果一样就下一个,如果一直到'\0'都是一样的,那么返回0,但凡中间有哪个大,就不会是0。

现在,我们来实现一下。

我们首先要两个指针指向两个数组,解引用之后,比较两个指针,如果等于就++,就这样的循环,一直到有一个为'\0'的时候停下来。如果两个都是'\0'的话,就直接返回0,不然就返回两个数相减的值。

这些就是字符串的全部内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值