【C语言】三种方法模拟实现 strlen 函数

前言

这篇文章将要带我们去实现模拟一个stelen()函数
首先我们要知道strlen()函数的定义

strlen()定义和用法

我们先看一下strlencplusplus网站中的定义
链接: 点击跳转
在这里插入图片描述
这里我们可以知道strlen的用法

size_t strlen ( const char * str );

获取字符串长度
返回 C 字符串 str 的长度。

C 字符串的长度由终止 null 字符决定:C 字符串的长度与字符串开头和终止 null 字符之间的字符数(不包括终止 null 字符本身)一样长。

这不应与保存字符串的数组的大小相混淆。例如:

char mystr[100]=“test string”;

定义一个大小为 100 个字符的字符数组,但初始化 mystr 的 C 字符串的长度只有 11 个字符。因此,当 sizeof(mystr)的计算结果为 100 时,strlen(mystr) 返回 11。

  • 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含 '\0' )。
  • 参数指向的字符串必须要以 '\0' 结束。
  • 注意函数的返回值为size_t,是⽆符号的
    (详细的size_t类型介绍可以看这篇文章【C语言】C\C++中的size_t类型)

这里补充一点’\0‘ASCLL码值为0

strlen()的模拟实现

知道了函数的定义和用法和上述的知识,就可以模拟实现了!

方法一:

首先我想到了第一种实现方法:

用计数器的方式实现

  • 把字符串str传入我们的模拟函数my_strlen()
  • 定义一个计数器变量count用来记录只服从长度
  • 循环遍历str(每一次count++并且str++)直到遇到‘\0'
  • 最后返回count

代码

//计数器⽅式
int my_strlen(const char * str)//这里我们不会更改str所以加上const修饰
{
 int count = 0;
 assert(str);//断言 str不为空指针
 while(*str)
 {
 count++;
 str++;
 }
 return count;
}

方法二:

那不使用计数器还有其他方法可以实现吗?
第二种方法我想到了递归

用递归的方法实现

  • 我们每次传入my_strlen()函数str+1
  • 判断*str是否为’\0‘’\0‘返回0否则返回1+my_strlen(str+1)

代码

//不能创建临时变量计数器
int my_strlen(const char * str)
{
 assert(str);
 if(*str == '\0')
 return 0;
 else
 return 1+my_strlen(str+1);
}

方法三:

那除了这两种方法还有没有别的方法呢!!
有!!
用一个指针减去另一个指针

指针-指针 方法

  • my_strlen()函数中定义一个指针p
  • p指针赋值为str
  • 循环遍历*p(每次p++
  • 这时循环结束p指针会指向字符串的最后位置(’\0'
  • p指针减去str就是用p的地址减去str的地址最后得到字符串长度

代码

//指针-指针的⽅式
int my_strlen(char *str)
{
 assert(str);
 char *p = str;
 while(*p != ‘\0)
 p++;
 return p-str;
}

如此,我们就用了三种方法去模拟实现了库函数中的strlen函数
如果有什么不足的地方,欢迎大家指正!
※ 如果文章对你有帮助的话,可以点赞收藏!!谢谢支持

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一岁就可帅-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值