strlen()函数的模拟实现
Posted 我是晓伍
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strlen()函数的模拟实现相关的知识,希望对你有一定的参考价值。
在c语言中,strlen()函数储存在string.h头文件中,作用是计算一个字符串的字符数。
实际上,这个函数内部运行中检测到\\0则停止运行,之后返回字符数。
下面我们通过三种方法模拟实现该函数的功能。
1.计数器法
代码如下
#include <stdio.h>
#include <assert.h>
int myStrlen(const char *p)
{
assert(p != NULL);
int count = 0; //开始假设字符串中字符数为0
while (*p != '\\0')
{
count++; //p解应用得到的不是\\0说明遇到了字符
p++; //指针指向下一个元素
}
return count;
}
int main()
{
char arr[10] = "cdefgab";
int ret = myStrlen(arr);
printf("%d\\n", ret);
return 0;
}
输出结果如下
2.递归法
代码如下
#include <stdio.h>
#include <assert.h>
int myStrlen(const char *p)
{
assert(p != NULL);
if (*p != '\\0')
{
return myStrlen(++p) + 1; //如果不为\\0则返回1+从下个字符开始的字符数
}
else
{
return 0; //如果*p == \\0则返回0个字符
}
}
int main()
{
char arr[10] = "cdefga";
int ret = myStrlen(arr); //函数作用为返回字符串字符个数
printf("%d\\n", ret);
return 0;
}
输出结果如下
3.指针减指针法
代码如下
#include <stdio.h>
#include <assert.h>
int myStrlen(char *begin)
{
//指针减指针得到的是相差的元素个数
//在例子中就是第一个元素和\\0相差的个数,也就是字符个数
assert(begin != NULL);
char *end = begin; //用end指针指到]\\0
while (*end != '\\0')
{
end++;
}
return end - begin;
}
int main()
{
char arr[10] = "abcid";
int ret = myStrlen(arr); //函数作用为返回字符串字符个数
printf("%d\\n", ret);
return 0;
}
输出结果如下
over
以上是关于strlen()函数的模拟实现的主要内容,如果未能解决你的问题,请参考以下文章
C语言之库函数(strlen,strcpy,strcmp)模拟实现