strlen 的三种模拟方法

简介: strlen 的三种模拟方法

前言:

在C/C++ 中,strlen函数是一种计算字符串长度的库函数,要模拟此函数有多种方法,这里总结三种模拟方法。



1. strlen 函数介绍

  cplusplus - strlen

4c985f18723bd8325acbb8e43df77361_6db4849242f14859a7d2fed66972307b.png

strlen 函数的功能是计算字符串长度;

返回 size_t 类型(unsigned int 无符号整型)的数值;

使用此函数,只需传一个数组名。


一个字符串的末尾默认放有 '\0' ,通过统计 '\0' 之前出现的字符个数即可求得字符串长度,接下来的模拟都是按照这一思路


2.实现结果


2.1直观暴力型


循环 + 计数器即可

size_t my_strlen1(const char* str)
{
  assert(str != NULL);
    //断言,保证传入的字符不为空
  size_t len = 0; //普通的计数
  while (*str != '\0')  //普通的循环
  {
    len++;
    str++;
  }
  return len;
}


2.2指针 - 指针型


这种类型的思路 就是事先保存字符串起始位置的地址,后利用指针单独自加,最后两指针做差得出中间所夹字符个数。

size_t my_strlen2(const char* str)
{
  assert(str != NULL);
  char* start = str;
  while (*str)  //用单个字符本身做判断条件,当 '\0' 时不再进入循环
  {
    str++;
  }
  return str - start;
}


2.3递归型


strlen 也可以用递归实现啦 ~

思路就是 依然以不遇到 '\0' 为判断条件,满足条件就返回该字符(1)

继续用该函数从下一个字符开始统计

size_t my_strlen3(const char* str)
{
  assert(str != NULL);
  if (*str != '\0')
    return  1 + my_strlen3(str + 1);
  else
    return 0;
}

评价:

直观暴力型:最容易想到,中规中矩;

指针 - 指针型:代码小巧简洁;

递归型:累电脑,不容易想到,但可装x 。

你喜欢哪种呢?

目录
相关文章
uniapp导航栏组件如何使用
uniapp导航栏组件如何使用
259 0
|
运维 Prometheus 分布式计算
阿里云 ACK One 多集群管理全面升级:多集群服务、多集群监控、两地三中心应用容灾
本文介绍了 ACK One 近期发布的 3 个主要特性,覆盖了多集群管理的 3 个主要场景,跨集群服务发现与访问、多集群全局监控、应用容灾。除多集群管理外,ACK One 更是支持连接并管理任何地域、任何基础设施上的 Kubernetes 集群,提供一致的管理和社区兼容的 API,支持对计算、网络、存储、安全、监控、日志、作业、应用、流量等进行统一运维管控。
阿里云 ACK One 多集群管理全面升级:多集群服务、多集群监控、两地三中心应用容灾
|
6月前
|
存储 算法 Java
求数组中的最大值和最小值
本文介绍了在程序中如何查找数组中的最大值和最小值,重点讲解了两种算法:普通算法和分治算法。普通算法通过遍历数组直接比较元素大小,找出最值;而分治算法则通过递归将数组划分成更小的部分,分别找出各部分的最大值,最终合并结果得到整个数组的最大值。文章以 {3,7,2,1} 为例,详细演示了两种算法的实现过程,并提供了 C、Java 和 Python 的代码示例。
449 0
|
8月前
|
测试技术
软考软件测评师大题——案例分析之白盒测试
历年下午案例试题一固定考察白盒测试,主要包含三大核心问题:推导逻辑条件、绘制控制流图及计算环路复杂度、确定线性无关路径集合。内容涵盖覆盖层级标准(语句、分支、判定、条件覆盖等)、控制流图构建规范(顺序、分支、循环结构转换原则)、环路复杂度计算公式以及线性无关路径生成方法。通过典型题型示例解析,如代码路径分析与验证指标,帮助考生掌握解题思路和技巧。
|
NoSQL 关系型数据库 MySQL
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
不同系统下进行MySQL安装、MongoDB安装、Redis安装【2月更文挑战第5天】
788 5
Windows、Linux、Mac安装数据库(mysql、MongoDB、Redis)#0
|
机器学习/深度学习 人工智能 运维
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
550 0
|
Ubuntu Linux Python
UserWarning: Glyph 27668 (\N{CJK UNIFIED IDEOGRAPH-6C14}) missing from current font.
UserWarning: Glyph 27668 (\N{CJK UNIFIED IDEOGRAPH-6C14}) missing from current font.
1346 2
CRC与FCS的区别和联系
CRC与FCS的区别和联系
1279 0
|
存储 安全 网络协议
URL过滤
URL过滤
644 6
|
域名解析 JSON 网络协议
freeipa安装部署
freeipa是linux的一个开源的安全解决方案,它提供账户管理和集中认证,类似于微软的AD(active directory)。
4255 0

热门文章

最新文章