strlen函数使用与模拟实现【进阶版】

news2024/10/12 6:27:16

strlen函数使用与模拟实现

1.strlen函数介绍

资源来源于cplusplus网站
在这里插入图片描述

翻译过来的大致意思就是:

获取字符串长度

2.strlen的使用

int main()
{
//strlen - 求字符串长度的
//字符串的结束标志是\0
//strlen统计的是\0之前出现的字符的个数
//基本功能
char arr[] = "abcdef";
//a b c d e f \0
size_t len = strlen(arr);
printf("%zd\n", len);

//1. strlen函数要正确获得字符串长度的话,字符串中必须得有\0
/*char arr[] = { 'a', 'b', 'c' , '\0'};
size_t len = strlen(arr);
printf("%zd\n", len);*/

//2. 要注意strlen的返回值类型是size_t


if (strlen("abc") - strlen("abcdef") > 0)
	printf(">\n");
else
	printf("<=\n");

return 0;
}

3.strlen模拟实现

方法1.指数+整数

解引用

size_t my_strlen(const char*str)
{
	size_t count = 0;
	while (*str != 0)
	{
		*str++;
		count++;
	}
	return count;

}

方法2.指针-指针 —> 地址-地址

得到的是指针与指针之间的元素个数

size_t my_strlen(const char* str)
{
	const char* start = str;
	while (*str != '\0')
	{
		str++;
	}
	return str - start;
}

方法3.递归实现

递归的思想:大事化小
my_strlen("abcdef")
1+my_strlen("bcdef")
1+1+my_strlen("cdef")
1+1+1+my_strlen("def")
1+1+1+1+my_strlen("ef")
1+1+1+1+1+my_strlen("f")
1+1+1+1+1+1+my_strlen("")
1+1+1+1+1+1+0 = 6
size_t my_strlen(char* str)
{
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/993015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【送书活动】全网超50万粉丝的Linux大咖良许,出书了!

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

母婴品牌的小红书投放策略有哪些,投放总结

最近有很多人想知道达人投放的一些相关知识&#xff0c;我们立马捕捉到了大家对这一干货内容的感兴趣程度&#xff0c;今天就来为大家分享下&#xff0c;母婴品牌的小红书投放策略有哪些&#xff0c;投放总结&#xff01; 什么是达人投放? 达人投放是一种常用于社交媒体营销的…

异步FIFO项目 UVM验证

文章目录 前言一、异步FIFO仿真过程1、异步FIFO设计2、UVM验证 二、脚本文件编写三、编译错误 前言 2022.11.15 记录自己开始使用UVM仿真异步FIFO项目 一、异步FIFO仿真过程 1、异步FIFO设计 首先对编写的异步FIFO设计代码进行验证&#xff0c;写了一个test.v文件 &#xff…

docker概念、安装与卸载

第一章 docker概念 Docker 是一个开源的应用容器引擎。 Docker 诞生于2013年初&#xff0c;基于 Go 语言实现&#xff0c;dotCloud 公司出品&#xff0c;后改名为 Docker Inc。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发…

Python的命名空间和作用域

所谓作用域就是指变量名/对象名在多大范围内是可见的/有效的&#xff0c;一个变量名既不能作用域太大&#xff0c;这样会引发广泛的命名冲突&#xff0c;也不能太小&#xff0c;这样很难实现变量的共享&#xff0c;所以一般都有多层次的作用域。一个层次的作用域&#xff0c;在…

WebGL 同时使用多幅纹理

目录 前言 ​编辑 示例代码 颜色矢量的分量乘法来计算两个纹素最终的片元颜色 注册事件响应函数&#xff1a;loadTexture&#xff08;&#xff09;&#xff0c;最后一个参数是纹理单元编号。 请求浏览器加载图像&#xff1a; 配置纹理&#xff1a;loadTexture&#xff0…

linux 安装Docker

# 1、yum 包更新到最新 yum update # 2、安装需要的软件包&#xff0c; yum-util 提供yum-config-manager功能&#xff0c;另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3、 设置yum源 yum-config-manager --add-repo h…

基于SSM的汽车养护管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

谈论浏览器内核

浏览器内核是指浏览器使用的渲染引擎&#xff0c;用于解析并显示网页的内容。主要有以下几种浏览器内核&#xff1a; Trident&#xff08;IE内核&#xff09;&#xff1a;由Microsoft开发&#xff0c;被用于Internet Explorer浏览器。目前已经被Edge取代。 Gecko&#xff1a;…

并发内存池(C++)

项目简介 这个项目是实现了一个高效的并发内存池。它的原型的goggle的一个开源项目tcmalloc&#xff0c;即thread-cache malloc&#xff08;线程缓存的malloc&#xff09;&#xff0c;实现了高效多线程的内存管理&#xff0c;可实现对系统提供的内存分配函数malloc和free的替代…

调教 文心一言 生成 AI绘画 提示词(Midjourney)

文章目录 第一步第二步第三步第四步第五步第六步第七步第八步 文心一言支持连续对话 我瞎玩的非专业哈哈 第一步 你好&#xff0c;今天我们要用扩散模型创建图像。我会给你提供一些信息。行吗? 第二步 这是Midjourney的工作原理:Midjourney是另一个基于ai的工具&#xff0c;能…

web学习 之了解

本文的学习资源来自b站

Dos窗口设置环境变量的方法

1.Win R 打开运行窗口输入&#xff1a;cmd 2.在窗口中输入:set path%path%;[配置的绝对路径] 温馨提示:替换路径的时候记得将[配置的绝对路径]全部替换~

啪啪打脸,中国移动紧急回应,继续销售iPhone

针对近期媒体平台纷纷传出三大运营商停售iPhone的消息&#xff0c;日前中国移动紧急回应多家媒体的报道指将会继续与苹果合作销售iPhone&#xff0c;并且最新款的iPhone15也将同步发售&#xff0c;显然这是对那群特殊人群的有力回击。 iPhone已成为中国高端消费者的优先选择&am…

【杂】环形时钟配色笔记

配色网站笔记 coolorsflatuicolorscolordrophttps://www.webdesignrankings.com/resources/lolcolors/ 配色2

Python之设计模式

一、设计模式_工厂模式实现 设计模式是面向对象语言特有的内容&#xff0c;是我们在面临某一类问题时候固定的做法&#xff0c;设计模式有很多种&#xff0c;比较流行的是&#xff1a;GOF&#xff08;Goup Of Four&#xff09;23种设计模式。当然&#xff0c;我们没有必要全部学…

kafka实战报错解决问题

需求 在一个在线商城中&#xff0c;用户下单后需要进行订单的处理。为了提高订单处理的效率和可靠性&#xff0c;我们使用Kafka来实现订单消息的异步处理。当用户下单后&#xff0c;订单信息会被发送到Kafka的一个Topic中&#xff0c;然后订单处理系统会从该Topic中消费订单消…

企业架构LNMP学习笔记29

Nginx负载均衡配置&#xff1a; 架构分析&#xff1a; 1&#xff09;用户访问请求Nginx负载均衡服务器&#xff1b; 2&#xff09;Nginx负载均衡服务器再分发请求到Web服务器。 实际配置负载均衡&#xff0c;只需修改作为负载均衡服务器的Nginx即可&#xff0c;当前架构中的…

Mapper传递参数的方法

目录 方法1&#xff1a;顺序传参法 方法2&#xff1a;Param注解传参法 方法3&#xff1a;Map传参法 方法4&#xff1a;Java Bean传参法 方法1&#xff1a;顺序传参法 public User selectUser(String name, int deptId);<select id"selectUser" resultMap&quo…

一篇文章教会你什么是高度平衡二叉搜索(AVL)树

高度平衡二叉搜索树 AVL树的概念1.操作2.删除3.搜索4.实现描述 AVL树的实现1.AVL树节点的定义2.AVL树的插入3.AVL树的旋转3.1 新节点插入较高右子树的右侧---右右:左单旋3.2 新节点插入较高左子树的左侧---左左:右单旋3.3 新节点插入较高左子树的右侧---左右&#xff1a;先左单…