1.计数器:遍历字符串直到遇到'\0'
//计数器
int My_strlen1(const char* pc)//本意不改遍字符串内容,加const限定
{
int count;//计数器,找到一个字符加一
count = 0;
while (*pc != '\0')
{
count++;
pc++;
}
return count;
}
2.指针-指针:同类型的两个指针相减,得到的是两指针间相差的元素个数
//指针-指针(得到的结果是两个指针中间的元素个数)
int My_strlen2(const char* pe)
{
const char* ps;
ps = pe;
while (*pe!='\0')
{
pe++;
}
return pe - ps;
}
3.递归 :调用函数,指针解引用得到字符返回1,’\0‘返回0,反复调用函数,通过参数改变指针位置
//递归
int My_strlen3(const char* pc)
{
if (*pc != '\0')
{
return 1 + My_strlen3(pc + 1);//至少有一个字符,所以用1+···
}
else
return 0;
}
加测试函数的完整代码
//模拟实现strlen
#include<stdio.h>
//计数器
int My_strlen1(const char* pc)
{
int count;
count = 0;
while (*pc != '\0')
{
count++;
pc++;
}
return count;
}
//指针-指针(得到的结果是两个指针中间的元素个数)
int My_strlen2(const char* pe)
{
const char* ps;
ps = pe;
while (*pe!='\0')
{
pe++;
}
return pe - ps;
}
//递归
int My_strlen3(const char* pc)
{
if (*pc != '\0')
{
return 1 + My_strlen3(pc + 1);//至少有一个字符,所以用1+···
}
else
return 0;
}
//测试函数
int main(void)
{
char str[20] = "asdff";
printf("%d\n", My_strlen1(str));
printf("%d\n", My_strlen2(str));
printf("%d\n", My_strlen3(str));
return 0;
}