模拟实现库函数strlen - C语言

模拟实现库函数strlen - C语言

strlen函数介绍

在实现库函数strlen之前,我们首先要了解一下strlen函数。

功能

函数功能:计算字符串长度,即'\0'前的字符数。
strlen.function

返回类型及函数参数

strlen

返回类型:size_t 实际上就是unsigned int。
size_t

函数参数:const char *string。const修饰的字符型指针变量,保证string指向的内容不可改变,提高了代码的安全性。

头文件

头文件:<string.h>

模拟实现strlen - my_strlen

在对strlen函数有一定了解之后,我们就要尝试实现我们自己的strlen函数,即my_strlen。

创建函数环境

首先我们要创建一个函数环境。
函数环境:

#include <stdio.h>
#include <assert.h>//assert需要引用的头文件
#define N 10000//定义符号常量
size_t my_strlen(const char*);//my_strlen函数声明
int main()//函数环境
{
    char ch[N] = { 0 };
    gets(ch);//读取字符串
    unsigned len = my_strlen(ch);//函数调用
    printf("%u\n", len);//打印字符串长度
    return 0;
}

在创建好函数环境之后,就是my_strlen 函数的具体实现。

计数器版本

要点:当指针变量str指向的字符不是'\0'时,str自增指向下一个字符,同时count自增。

size_t  my_strlen(const char* str)//版本2 - 计数器版本
{
       assert(str != NULL);//断言 - 避免str为空指针
       unsigned count = 0;//计数器初始化
       for (count = 0; *str++ != '\0'; count++);
       return count;
}

指针-指针版本

要点:指针-指针所得结果为两个指针之间的元素个数,首先用str1记录字符串首地址,然后用str自增找到'\0'的位置,最后用str-str1即为两个指针间元素的个数。

size_t  my_strlen(const char* str)//版本1 - 指针-指针版本
{
       assert(str != NULL);//断言 
       const char* str1 = str;//记录字符串首地址
       while (*str != '\0')
       {
              str++;
       }
       return str - str1;
}

递归版本

递归版本就比较简单了,采用了大事化小原理,这里不做过多介绍。

size_t  my_strlen(const char* str)//版本3 - 递归版本
{
       assert(str != NULL);//断言
       if (*str != '\0')
       {
              return (1 + my_strlen(str + 1));//递归调用
       }
       return 0;
}

运行结果

运行结果

模拟实现库函数strlen的三种方法,你学会了吗!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值