一、逐个计数法
#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',则返回0return 0; else //不是'\0',就将指针向后移动一位,调用函数,加上一个1return 1 + my_strlen(p + 1);
}int main()
{char str[] = "hello world";size_t len = my_strlen(str);printf("%d", len);return 0;
}