1.计数器法 2.递归方法 3.指针-指针
1.计数器法
#include<stdio.h>
int my_strlen(char* str) //传过来数组,用指针接收
{
int count = 0; //统计有多少个字符,计算长度
while (*str != '\0') //如果*str≠'\0'就进行循环查找,直到找到'\0',停止
{
str++; //每找到一次,跳到下一个位置
count++; //每找到一次就统计一次
}
return count;
}
int main()
{
char arr[] = "abcdefg";
printf("abcdefg的长度 = %d\n", my_strlen(arr)); //调用函数my_strlen(arr)计算字符串长度
return 0;
}
2.递归
#include<stdio.h>
int my_strlent(char* str) //数组名arr传的是首元素的地址,这里用字符指针接收一下
{
if (*str == '\0') //如果传过来的地址第一个字符是\0就直接返回0
return 0;
else
return 1 + my_strlent(str + 1); //否则第一个字符就不是'\0',就返回1加上后面的字符,这里直接开始递归
}
int main()
{
char arr[] = "abcdefg"; //创建一个字符数组,初始化abcdefg
int len = my_strlent(arr); //创建一个整型变量len来存放my_strlent(arr)函数计算的字符串长度
printf("len = %d\n", len); //最后打印显示len的值 len=7
return 0;
}
3.指针-指针的方法
注意: 指针减去指针=指针之间元素的个数
例如:
&arr[9]-&arr[0] = 9;
&arr[0]-&arr[9] = -9;
下面是代码:
#include<stdio.h>
int my_strlent(char* str) //注意传过来的是地址
{
//创建一个字符指针变量start来存放数组的首元素地址
char* start = str;
while(*str) //如果*str≠'\0'就进行循环查找,当*str='\0'时,'\0'就是0判断为假,跳出循环
{
str++; //每找到一次,跳到下一个位置
}
return str - start; //用末尾的指针减去开始的指针,得到指针之间的元素个数,返回这个值就是字符串的个数
}
int main()
{
char arr[] = "abcdefg";
int len = my_strlent(arr);
printf("len = %d\n", len);
return 0;
}