0
点赞
收藏
分享

微信扫一扫

利用函数、递归、指针等效实现strlen的功能

天使魔鬼 2022-03-23 阅读 97

1.strlen

首先我们要清楚strlen的功能是:​计算字符串的实际长度(不含字符串结束标志'\0')​,函数返回值为字符串的实际长度。

计算字符串长度的时候,我们要注意'\0'存在的意义,很有可能改变我们计算字符串时的值。

#include <stdio.h>
int main()
{
char arr1[] = "abc" ;
char arr2[] = { 'a', 'b', 'c' };
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
return 0;
}

在上面代码中,我们分别想取得数组arr1和arr2的长度

数组arr1中元素”abc“中隐藏了‘\0’,所以显而易见取得长度值为3;

数组arr2中我们并不知道‘\0’存在的位置,所以取得长度值为随机。

利用函数、递归、指针等效实现strlen的功能_strlen

2.利用函数、递归、指针等效实现strlen的功能

函数实现​:我们知道‘\0’是计算字符实际长度结束的标志,所以我们可以构造循环来记数‘\0‘之前的字符。

#include <stdio.h>

int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "hello world";
int len = my_strlen(arr);
printf("len=%d\n", len);
return 0;
}

递归实现:利用递归一层一层逐步判断当前字符是否为’\0‘,如果不为0,长度+1,继续调用一次my_strlen函数直至遇到‘\0’

#include <stdio.h>

int my_strlen(char* str)
{
if (*str != '\0')
{
return 1 + my_strlen(str + 1);
}
else
return 0;
}
int main()
{
char arr[] = "hello world";
int len = my_strlen(arr);
printf("len=%d\n", len);
return 0;
}

指针实现:在这里我们要知道​指针-指针​得到的是中间元素的个数

#include <stdio.h>

int my_strlen(char* str)
{
char * start = str;
char * end = str;
while (*end != '\0')
{
end++;
}
return end - start;
}
int main()
{
char arr[] = "hello world";
int len = my_strlen(arr);
printf("len=%d\n", len);
return 0;
}

来看一下程序运行的结果把:

利用函数、递归、指针等效实现strlen的功能_strlen_02

举报

相关推荐

0 条评论