//case2:编写函数不允许创建临时变量,求字符串的长度(递归和非递归分别实现strlen)
//方法一:递归
//分析:1、遇\0截止,所以是寻找\0,hello----hello\0
// 2、函数传递数组名,其实是数组的首元素地址,所以只需要对照第一个字符,若为\0,或空字符,函数递归截止
// 3、String_length(hello)
// 1+String_length(ello)
// 1+1+String_length(llo)
// 1+1+1+String_length(lo)
// 1+1+1+1+String_length(o)
// 1+1+1+1+1+String_length(\0)
// 4、strlen---不包含\0
// 5、若与\0就结束寻找---hello改为he\0llo,即输出为2
int String_length(char* arr)//返回字符串长度,为整形
{
if (*arr != '\0')
{
return 1 + String_length(arr+1);//arr+1---字符串的首地址向后移动一位--元素向后移动一位
//arr+1--- 这里等价于++arr,但不建议这样写,由于会影响arr的值;
//int a = 1;
//int b = a + 1;//b=2,a=1
//int c = a++;//c=1,a=2
//int d = ++a;//d=2;a=2
}
else
{
return 0;//直到*arr == '\0'
}
}
int main()
{
char arr[] = "hello";
int ret = String_length(arr);//数组字符串长度,函数传递数组名,其实是数组的首元素地址
printf("%d \n", ret);
return 0;
}
//方法二:非递归--循环
int String_length(char* arr)
{
int count = 0;
while (*arr != '\0')
{
count++;
arr++;//为了向后依次移动arr,地址向后移动--元素向后移动
}
return count;
}
int main()
{
char arr[] = "hello";
int ret = String_length(arr);
printf("%d \n", ret);
return 0;
}
C初阶(二十四) 函数递归_实现strlen
最新推荐文章于 2023-11-16 22:09:50 发布