目录
strlen是一个库函数,在编程的过程中我们可以直接使用。那么有没有办法可以自己实现呢?
在自己实现strlen前,我们需要知道strlen的功能。
strlen的功能
参考cplusplus.com。由上可知,strlen的功能是求字符串的长度,遇到'\0'结束,并且'\0'不计入
举例如下:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "abcdefg";
printf("%d\n", strlen(arr));
return 0;
}
数组arr中的元素为"a b c d e f g \0",所以字符串的长度为7,我们看一下运行结果也确实是7
那我们怎么自己来编写函数实现strlen的功能呢?
my_strlen的实现
1.非递归实现
分析:我们仍用字符串"abcdefg"为例,设置一个count用来记录字符串的长度。传数组到my_strlen()函数中,如果读取的字符不为'\0',则count++,再传入下个字符,知道遇到'\0'结束!
根据我们的分析,我们写出如下程序:
#include<stdio.h>
int my_strlen(char* arr)
{
int count = 0;
while (*arr != '\0')
{
count++;//不为'\0'时,长度+1
arr++;//传入下一字符
}
return count;//返回count,打印出长度
}
int main()
{
char arr[] = "abcdefg";
printf("%d\n", my_strlen(arr));
return 0;
}
我们看一下打印结果,发现与使用strlen打印的结果相同
上述是我们用非递归的方式实现的,那么想一想my_strlen能不能用递归方式实现呢?
2.递归实现
分析:my_strlen传入数组的首元素,若首元素为'\0',则我们return 0;若首元素不为'\0',则传入下一元素,直至到'\0'
根据分析,我们写出程序
#include<stdio.h>
int my_strlen(char* arr)
{
if (*arr == '\0')
return 0;//首元素为'\0',直接return 0
else
return 1 + my_strlen(arr + 1);//不为'\0'时,传入下一元素
}
int main()
{
char arr[] = "abcdefg";
printf("%d\n", my_strlen(arr));
return 0;
}
我们看一下打印结果,发现与使用strlen打印的结果相同