通常我们在求字符串长度的时候会使用strlen函数进行实现,小编在这里介绍一下如何来对strlen来进行模拟实现
1,计数器
计数器的原理是通过使用指针来对数组一一计数,当指针指到字符串中最后一个字符'\0'时,停止计数
#include<stdio.h>
#include<string.h>
#include<assert.h>
1.计数器
size_t My_strlen(const char *str)
{
size_t count = 0;
assert(str != NULL);
while (*str)
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
size_t len = My_strlen(arr);
printf("%zd", len);
return 0;
}
2,指针减去指针
通过前面的学习我们了解到指针减去指针是两个地址之间元素的个数,通过这种方法我们可以对字符串元素个数进行统计
size_t My_strlen(const char *str)
{
char* start = str;
assert(str != NULL);
while (*str)
{
str++;
}
return str - start;
}
int main()
{
char arr[] = "abcdef";
size_t len = My_strlen(arr);
printf("%zd", len);
return 0;
}
3,函数递归
函数递归的思想即为将大事化小,在函数中只统计字符串中第一个元素是否为'\0',如果不是则字符数组长度至少为1,然后去掉第一个元素,在进行检测,知道检测的元素为'\0'
My_strlen("abcdef")
1+My_strlen("bcdef")
1+1+My_strlen("cdef")
1+1+1+My_strlen("def")
1+1+1+1+My_strlen("ef")
1+1+1+1+1+My_strlen("f")
1+1+1+1+1+1+My_strlen("")
size_t My_strlen(char* str)
{
if (*str == '\0')
return 0;
else
return 1 + My_strlen(str + 1);
}
int main()
{
char arr[] = "abcdef";
size_t len = My_strlen(arr);
printf("%zd", len);
return 0;
}
OK以上就是小编今天要分享的内容啦,欢迎各位小伙伴在我评论区留言。