这是一个我们已知的求字符串长度的代码:
(但题目要求我们自己写一个新的 不用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