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’存在的位置,所以取得长度值为随机。
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;
}
来看一下程序运行的结果把: