我们知道,strlen函数是一个用于计算字符串中字符大小的库函数,那么今天我们就来用三种方法模拟实现strlen函数
首先,我们来了解一下strlen函数的细节知识:
看不懂洋文?没关系
我们一起拍照翻译
这段文字简单介绍了strlen函数的功能和测试用例,函数实现其实主要看参数与返回类型
也就是这一行:
该函数返回类型为size_t(毕竟计算字符个数嘛怎么可能出现负数)
参数类型为const char*
根据这点可以把函数的框架先写出来
size_t my_strlen(const char* str)
{
}
下面就可以来模拟实现啦
方法一:循环
明确目标:写一个函数,函数功能为计算字符串中字符个数
1.定义一个字符数组
char arr[]="hello world";
2.将数组首元素地址传给函数my_strlen
size_t len=my_strlen(arr);
3.运用指针向后查找并计数,遇到 \0 即止
size_t my_strlen(const char* str)
{
size_t count=0;
while(*str!='\0')
{
str++;
count++;
}
return count;
}
完整代码:
#include <stdio.h>
size_t my_strlen(const char* str)
{
size_t count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char arr[] = "hello world";
size_t len = my_strlen(arr);
printf("%zd", len);
return 0;
}
优化:加入assert断言确保指针的有效性
#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
size_t count = 0;
assert(str != NULL);
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char arr[] = "hello world";
size_t len = my_strlen(arr);
printf("%zd", len);
return 0;
}
方法二:递归
在讲递归实现strlen前,我们先了解一下什么是递归
递归
递归,名表其意,先递后归,递归就是函数自己调用自己的过程
递归必要条件:
存在限制条件,递归调用后越来越接近这个限制条件
知道这些简单的知识即可关于递归的更详细的介绍在另一篇文章:
下面为函数实现
思路:
1.使用if else语句判断字符是否为 \0
size_t my_strlen(const char* str)
{
if (*str == '\0')
{
}
else
{
}
}
2.使用递归返回值(是\0,返回0,不是\0,再次调用函数(即递归))
size_t my_strlen(const char* str)
{
if (*str == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
完整代码:
#include<stdio.h>
size_t my_strlen(const char* str)
{
if (*str == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
int main()
{
char arr[]=“hello world”;
size_t b= my_strlen(arr);
printf("%zd", b);
return 0;
}
方法三:指针运算
在学习过了指针运算相关内容后,我们知道了,指针之差表示指针间的元素个数,我们也可以借助这条性质模拟实现strlen函数,(实现过程和方法一多有相似,在这里不再赘述)具体实现如下:
#include<stdio.h>
size_t my_strlen(const char* str)
{
const char* start = str;
while (*str != '\0')
{
str++;
}
return str - start;
}
int main()
{
char arr[] = "hello world";
size_t a = my_strlen(arr);
printf("%zd\n", a);
return 0;
}
以上就是strlen函数模拟实现的全部内容
感谢阅读!(*'▽'*)♪