这篇文章一共介绍三种方法模拟实现求字符串长度strlen的函数.
法一:计数器(非递归)
#include<stdio.h>
#include<assert.h>
int my_strlen(char* str)
{
//指针断言
assert(str != NULL);
int count = 0;
while (*str++)
{
count++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
法二:递归的方式
#include<stdio.h>
#include<assert.h>
int my_strlen(char* str)
{
assert(str);
//递归出口
if (*str == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
int main()
{
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
法三:指针-指针的方式
思路:指针存放变量的地址,指针断言后,用指针变量char* start保留传过来的首元素’a’的地址,然后str向后走,直到遇到’\0’,字符串结束的标志,这个时候str存的是’\0’的地址,‘\0’的地址减去一开始保留的首元素地址,就会等于6啦(由于是字符指针,字符为1个字节,所以地址也相差1。例如整型的大小是4个字节,地址相差也为4)。
#include<stdio.h>
#include<assert.h>
int my_strlen(char* str)
{
assert(str);
//保留首元素地址
char* start = str;
while (*str)
{
str++;
}
return str - start;
}
int main()
{
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}