strlen递归实现:
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#include<stdio.h>
size_t my_strlen( const char*str)
{
assert(str);
if (*str!='\0')
{
return 1 + my_strlen(str + 1);//递归
}
else
return 0;
}
int main()
{
char*p = "abcdef";
int ret=my_strlen(p);
printf("%d\n", my_strlen(p));
system("pause");
return 0;
}
strlen常规实现:
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#include<stdio.h>
size_t my_strlen(const char*str)
{
assert(str);
int count = 0;//创建计数器
while (*str)
{
count++;
str++;
}
return count;
}
int main()
{
char*p = "abcdef";
int ret=my_strlen(p);
printf("%d\n",my_strlen(p));
system("pause");
return 0;
}
strlen指针实现:
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#include<stdio.h>
size_t my_strlen(const char*str)
{
assert(str);
char*end = str;
while (*end)
{
end++;
}
return end - str;//地址相减其实是元素个数。而中间元素又是字符组成,也就是字符个数
}
int main()
{
char*p = "abcdef";
// int ret=my_strlen(p);
printf("%d\n", my_strlen(p));
system("pause");
return 0;
}
以上就是我对strlen的三种实现,欢迎大家指教