一、逐个计数法
#include<assert.h>
#include<stdio.h>
size_t my_strlen(const char* p)
{
int count = 0;
assert(p);//断言
while (*p != '\0')
{
p++;
count++;
}
return count;
}
int main()
{
char str[] = "hello world";
size_t len = my_strlen(str);
printf("%d", len);
return 0;
}
二、指针减指针法
#include<assert.h>
#include<stdio.h>
size_t my_strlen(const char* p)
{
assert(p);//断言
char* start = p;//记录初始位置
while (*p != '\0')
{
p++; //p到达末尾位置
}
return p - start; //俩个指针之差为二者之间元素个数
}
int main()
{
char str[] = "hello world";
size_t len = my_strlen(str);
printf("%d", len);
return 0;
}
三、递归(不创建临时变量)
#include<assert.h>
#include<stdio.h>
size_t my_strlen(const char* p)
{
assert(p);//断言
if (*p == '\0') //如果是'\0',则返回0
return 0;
else //不是'\0',就将指针向后移动一位,调用函数,加上一个1
return 1 + my_strlen(p + 1);
}
int main()
{
char str[] = "hello world";
size_t len = my_strlen(str);
printf("%d", len);
return 0;
}