🐣🐣模拟实现库函数strlen的三种方法
1.🐣计数器的方法
利用指针的解引用操作并判断是否为’\0’,如果不是count++,如果是,结束循环!
int my_strlen(const char* str) {//常规计数器的实现
assert(str);//断言,防止用户传进来的指针为空指针
int count = 0;
while (*str) {
count++;
str++;
}
return count;
}
2.🐣指针相减的运算
同类型的指针想减,得到的是这两个指针相差的元素的个数,因为地址有高低之分,所以该结果也是有正负之别的;
int my_strlen1(const char* str) {//指针减法的应用
assert(str);
char* head = str;
while (*str) {
str++;
}
return str - head;
}
3.🐣递归实现
这个库函数是比较常规的递归,因为它的终止递归的条件也太明显了,递归部分也是比较简单的;
int my_strlen2(const char* str) {//递归的实现
assert(str);
if ((*str) != '\0') {
return 1+my_strlen2(str + 1);
}
else {
return 0;
}
}
通过上面的三个方法,我们能简单的模拟实现库函数strlen,下面我们来测试一下;
int main() {
char arr[] = "abcdefg";
printf("%d\n", my_strlen(arr));
printf("%d\n", my_strlen1(arr));
printf("%d\n", my_strlen2(arr));
return 0;
}
小编是在vs2019的环境下测试的,有兴趣的小伙伴可以自己按照这三种方法写写看哦!有什么问题,欢迎评论区留言,虽然小编实力有限,但我一定会努力为你解决的。💕💕