当前位置: 首页 > news >正文

【C语言 模拟实现strlen函数的三种方法】

C语言程序设计笔记---022

  • C语言之模拟实现strlen函数
    • 1、介绍strlen函数
    • 2、模拟strlen函数的三种方法
      • 2.1、计数器法模拟实现strlen函数
      • 2.2、递归法模拟实现strlen函数
      • 2.3、指针减指针法模拟实现strlen函数
    • 3、结语

C语言之模拟实现strlen函数

前言:
通过C语言字符串函数的知识,这篇将对strlen函数进行深入学习底层的知识,并模拟实现对应功能。

/知识点汇总/

1、介绍strlen函数

函数原型:size_t strlen( const char string );
函数功能:返回参数的字符串长度
头文件:<string.h>
使用注意事项
(1)、以双引号初始化括起来的字符串自动识别’\0’字符串结束标志位,如“abcdef”本质是“abcdef\0”
(2)、以数组大括号初始化字符元素时,需手动添加‘0’字符串结束标志位,如{‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘\0’}
(3)、strlen函数的参数是char
类型,接收对象是地址;不是类型占内存的大小,不包括’\0’;strlen是不会计算’\0’之后的长度的。
示例代码如下

#include <stdio.h>
#include <string.h>
//使用strlen函数,需要调用头文件 ---- <string.h>
int main()
{char arr[] = "hello";printf("%d\n",strlen(arr));//计算字符串长度,不包括'\0'char arr2[] = {'a','b','c','d','e','f','\0'};printf("%d\n",strlen(arr));//计算字符串长度,不包括'\0'return 0;
}

2、模拟strlen函数的三种方法

2.1、计数器法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(char* str)
{size_t count = 0;while (*str++ != '\0'){count++;}return count;
}
int main()
{char arr[] = "abcdef";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}

2.2、递归法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(const char* str)
{if (*str == '\0')return 0;elsereturn 1 + my_strlen(str + 1);
}
int main()
{char arr[] = "abcdef";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}

2.3、指针减指针法模拟实现strlen函数

#include <stdio.h>
size_t my_strlen(const char* str)
{char* ret = str;while (*str != '\0'){str++;}return str - ret;}
int main()
{char arr[] = "abcdef";size_t len = my_strlen(arr);printf("%zd\n", len);return 0;
}

3、结语

学习函数的最实用的方式就是用自己的逻辑简单实现一些类似的功能
半亩方糖一鉴开,天光云影共徘徊。
问渠哪得清如许?为有源头活水来。–朱熹(观书有感)

http://www.lryc.cn/news/180815.html

相关文章:

  • MySQL数据库与表管理《三国志》为例
  • D. Jellyfish and Mex - DP
  • 奥斯卡·王尔德
  • IDEA常用快捷键大全
  • Java之多线程的综合练习二
  • selenium下载安装 -- 使用谷歌驱动碰到的问题
  • 开放式耳机怎么选择、300之内最好的耳机推荐
  • git密码提交切换SSH提交
  • 数字乡村包括哪些方面?数字乡村应用介绍
  • 弹性资源组件elastic-resource设计(一)-架构
  • C/C++笔试面试真题
  • 【Vue3】兄弟组件传参
  • 【CSS 中 link 和@import 的区别】
  • 笔记二:odoo搜索、筛选和分组
  • Ubuntu Zookeeper开机自启动服务
  • 关于Matlab与Python中日期转时间戳不一致的问题
  • 【Django 笔记】第一个demo
  • 算法通过村第十一关-位运算|白银笔记|高频题目
  • 04、EL和JSTL核心技术
  • 【LeetCode热题100】--148.排序链表
  • 分布式并行训练(DP、DDP、DeepSpeed)
  • Linux- fg命令 bg命令
  • leetcode第362场周赛
  • 图神经网络GNN(一)GraphEmbedding
  • 多目标平衡优化器黏菌算法(MOEOSMA)求解CEC2020多模式多目标优化
  • 快速开发微信小程序之一登录认证
  • Mybatis配置文件(mybatis-config.xml)和Mapper映射文件(XXXMapper.xml)模板
  • 4. 条件查询
  • 【VIM】初步认识VIM-2
  • 《HelloGitHub》第 90 期