首页 > 其他分享 >自己编写一个函数,不允许创建临时变量,求字符串长度

自己编写一个函数,不允许创建临时变量,求字符串长度

时间:2023-01-20 22:31:46浏览次数:41  
标签:arr return 变量 my len str 字符串 编写 strlen

这是一个我们已知的求字符串长度的代码:

(但题目要求我们自己写一个新的 不用strlen)

#include<stdio.h>
#include<string.h>
int main()
{
char arr[]="hi!";
int len=strlen(arr);
printf("%d\n",len);
return 0;
}

循环方法的解法(未考虑临时变量的问题):

因为引入了count

#include<stdio.h>
int my_strlen(char* str)//str指针变量
{
//计算字符串的长度
int count=0;
while(*str!='\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[]="hi!";
int len=my_strlen(arr);//arr是数组 数组传参 传过去的不是整个数组 而是第一个元素的地址
printf("len=%d\n",len);
return 0;
}

因为字符串的结束标志是’\0‘,所以只要*str还不是’\0‘时 对字符串数字的大小都会进行下去

str表示地址内存 *str表示地址内存的内容

递归解法:

#include<stdio.h>
int my_strlen(char* str)
{
//my_strlen("hi!")
//1++my_strlen("i!")
//1+1+my_strlen("!")
//1+1+1+my_strlen("")
//1+1+1+0
if(*str!='\0')
return 1+my_strlen(str+1);
else
return 0;
}
int main()
{
char arr[]="hi!";
int len=my_strlen(arr);
printf("len=%d\n",len);
return 0;
}

关键部分:

int my_strlen(char* str)
{
if(*str!='\0')
return 1+my_strlen(str+1);
else
return 0;
}

*str表示地址内存的内容,只有不是字符串结束标志’\0‘则会进入if

由于:

  //my_strlen("hi!")
//1++my_strlen("i!")
//1+1+my_strlen("!")
//1+1+1+my_strlen("")
//1+1+1+0

所以:

return 1+my_strlen(str+1);

直到走到’\0‘,则返回return 0,进行最后结果的输出

标签:arr,return,变量,my,len,str,字符串,编写,strlen
From: https://blog.51cto.com/u_15899086/6020826

相关文章