我们将这个函数命名为my_strlen,下面将给出几个不同角度的方法:
1.利用临时变量的创建
int my_strlen(char *str)//int my_strlen(char str[])
{
int count = 0;//计数,临时变量
while(*str != '\0')//字符串末尾是\0,只要不是\0,说明没结束
{
count++;
str++;//跳到下一个字符
}
return count;
}
int main()
{
char arr[] = "abc";
int len = my_strlen(arr);//字符串传过去的实际上是a的地址
printf("%d\n",len);
return 0;
}
2.利用指针减指针
注意,指针-指针中可以相减的指针必须指向同一个空间
指针减去指针的绝对值得到的是指针和指针之间元素的个数
因此要计算一个字符串的长度,我们只需要拿到'\0'的地址,再和起始地址相减就可以了
int my_strlen(char* str)
{
char* start = str;
while(*str!='\0')
{
str++;
}
return str-start;
}
int main()
{
int len = my_strlen("abcdef");
printf("%d\n",len);
return 0;
}
3.函数递归求解
原理:
my_strlen("abc")
1+my_strlen("bc")
1+1+my_strlen("c")
1+1+1+my_strlen("")
1+1+1+0
int my_strlen(char *str)
{
if(*str !='\0')
return 1+my_strlen(str+1);//+1就是到下一个字符的地址
else
return 0;
}
int main()
{
char arr[] = "abc";
int len = my_strlen(arr);//字符串传过去的实际上是a的地址
printf("%d\n",len);
return 0;
}