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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

(但题目要求我们自己写一个新的 不用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,进行最后结果的输出

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6