三种方法模拟实现strlen函数
原理
- 接受一个地址字符数组或字符串地址向后寻找直到出现‘\0’
- 返回值为字符个数即字符串长度,可链式访问
需要的头文件
#include <stdio.h>
#include <assert.h>
计数器法
int my_strlen(const char *s) //只需计数const修饰防止内容被改
{
assert(s!=NULL); //断言防止指针为空
int count = 0; //记录字符个数
while (*s++) //当内容为'\0'则自动停下
count++;
return count;
}
- 这种方法需要再声明一个变量用来计数
递归法
int my_strlen(const char *p)
{
assert(p!=NULL);
if (*p=='\0')
return 0;
else
return my_strlen(++p)+1;
}
- 很好的避免了需要声名变量
- 此方法如果你会递归的话很好理解
地址差法
int my_strlen(const char *s)
{
assert(s!=NULL);
const char *p = s;
while (*p++); //将*p指向'\0'的下一个地址,所以返回时要多减1。
return (int)(p-s-1);
}
- 地址差表示两地址之间元素(遵循指针的类型)个数
- 库函数思路即此方法