꧁ 各位大佬们好!很荣幸能够得到您的访问,让我们一起在编程道路上任重道远!꧂
☙ 博客专栏:【C生万物】❧
⛅ 本篇内容简介:详细介绍如何使用三种方法模拟实现库函数 strlen()!
⭐ 了解作者:励志成为一名编程大牛的学子,目前正在升大二的编程小白。
✍励志术语:编程道路的乏味,让我们一起学习变得有趣!
✂ 正文开始
文章目录
strlen的介绍以及功能
关于strlen的功能我们来看MSDN或者Cpulspuls(https://cplusplus.com/)怎么介绍的,这里我用的是MSDN。
strlen的一般用法
strlen可以求字符串的长度,即 \0 前字符的个数,看下面这个代码:
#include<stdio.h>
#include<string.h>
int main()
{
//char arr[] = "abcdef";//常量字符串 arr中存 a b c d e f \0
int len = strlen(arr);// strlen的返回值是size_t == unsigned int
printf("%d\n", len);
return 0;
}
运行结果:
可以得到求出的长度为 6。
计数器法模拟实现strlen
要点:在函数中定义一个计算 \0 之前字符出现的个数,最后返回计数器计算的个数。
#include<stdio.h>
#include<assert.h>
size_t my_strlen(char* ps)
{
assert(ps);//断言这个指针
size_t count = 0;//计算个数
while (*ps)
{
count++;
ps++;
}
return count;
}
//模拟实现返回值为 size_t 类型的strlen
int main()
{
char arr[] = "abcdef";
size_t len = my_strlen(arr);
printf("%u\n", len);
return 0;
}
指针 - 指针的方法模拟实现strlen
我们知道数组的地址是由低到高的,我们可以用地址的最高位减去地址的最低位,最后再返回就可以得到到这个字符的长度了。
我们来画个图:
思路理清了,就上代码:
#include<stdio.h>
#include<assert.h>
size_t my_strlen(char* src)
{
assert(src);//断言这个指针
char* dest = src;
while (*dest != '\0')
{
dest++;
}
return dest - src;
}
//模拟实现返回值为 size_t 类型的strlen
int main()
{
char arr[] = "abcdef";
size_t len = my_strlen(arr);
printf("%u\n", len);
return 0;
}
递归方法模拟实现strlen
递归的方法就比较简单了,我们直接上代码吧。
#include<stdio.h>
#include<assert.h>
size_t my_strlen(char* p)
{
assert(p);//断言这个指针
if (*p == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(p + 1);
}
}
//模拟实现返回值为 size_t 类型的strlen
int main()
{
char arr[] = "abcdef";
size_t len = my_strlen(arr);
printf("%u\n", len);
return 0;
}
OK! 把三种模拟实现strlen的方法,都分享给大家,你会哪几种呢!