C语言计算字符串长度一般是库函数计算。今天本人来自己实现字符串长度的计算。 😝
当形参以数组名传递时,由于数组名代表首元素地址,所以我们需要将字符串的个数传递给函数,但如果想自己输入字符串的话,那么可以把字符数组的长度规定的大一点。直接上代码
#include <stdio.h>
#define N 10
int main()
{
char arr[N] = { 0 };
scanf("%s", arr);
//函数形参以数组名接受
int ret1 = my_strlen1(arr,N);
//函数形参以指针接受
int ret2 = my_strlen2(arr);
//用递归实现
int ret3 = my_strlen3(arr);
printf("my_str_len1:%d\n", ret1);
printf("my_str_len2:%d\n", ret2);
printf("my_str_len3:%d\n", ret3);
return 0;
}
形参以数组名接收
int my_strlen1(char arr[],int num)//以数组形式传参
{
int count = 0;
int i = 0;
for (i = 0; i < num; i++)
{
if (arr[i] != '\0')
{
count++;
}
else
{
//放在循环内是防止循环第一个之后的所有字符'\0'
return count;
}
}
}
形参以指针接收
int my_strlen2(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;//++运算符可以用在指针上,而数组只能以下标访问
}
return count;
}
递归函数实现
int my_strlen3(char* str)
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen3(str+1);
}
递归实现比起第一和第二种,不创建临时变量。也是利用指针自增自减的特性实现对字符串的遍历
就是图画的太丑了😭。
结果测试