目录
1.借助中间变量(常规方法)
因为strlen求的是\0之前的字符个数,那么就可以while循环,遇到\0之前都可以count++,所以只需利用指针即可
#include<stdio.h>
int my_strlen(char* str)//接收了数组首元素的地址
{
int count = 0;
while (*str != '\0')
{
count++;
str++;//下一元素的地址
}
return count;
}
int main()
{
char arr[] = "haha";
printf("%d\n", my_strlen(arr));
return 0;
}
2.递归方法模拟
strlen遇到\0就结束了,很明显\0可作为递归出口,那字符串的长度不就=1(这个1是str往后移动一位后计算出的)+往后的字符个数。一直往后移动一位,每移动一位就+1,直到遇到\0
初学者可以看递归的过程 :
int my_strlen(char* str)
{
if (*str == '\0')
{
return 0;//递归出口,即遇到'\0'
}
else
{
return 1 + my_strlen(str + 1);//加完1后,str就会往后移动一位
}
}
int main()
{
char arr[] = "haha";
printf("%d\n", my_strlen(arr));
return 0;
}
3.指针相减法
指针相减得到的是两个指针之间的元素个数(c语言语法所规定的)
所以只需要求数组的第一个字符地址和最后一个字符(‘\0’)的地址就可以求出元素个数
int my_strlen(char* str)
{
char* start = str;//str是数组第一个字符的地址
while (*str != '\0')
{
str++;//总共5个字符,str最终会指向\0
}
return str - start;
}
int main()
{
char arr[] = "haha";
printf("%d\n", my_strlen(arr));
return 0;
}