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)模拟实现

模拟实现Strlen函数

strlen函数详解&&注意事项&&模拟实现

字符串函数的使用与模拟实现

模拟实现库函数strlen,strcpy,strstr,memmove,memcpy,strcat

str系列库函数--模拟实现