【c语言】字符串计算长度 | API仿真

news2024/10/6 10:40:01

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

c语言系列专栏:c语言之路重点知识整合

字符串知识点:字符串基本概念、存储原理

字符串计算长度 目录

  • 一、字符串计算长度
  • 二、strlen仿真
    • 声明:
    • 1.下标方式定义:
    • 2.指针方式定义:
    • 调用测试:
    • 运行结果:

一、字符串计算长度

标准库函数strlen:

.

使用:

#include <stdio.h>
#include <string.h>
int main()
{
	/* 如何得到字符串的长度 */
	 char str1[] ="Hello";
	 char *p1 = "Hello";
	 char *p2="Hello";
	 printf("%d\n", strlen(str1));
	 printf("%d\n", strlen("TianXi"));
	 printf("%d\n", strlen(++p1));
	 printf("%d\n", strlen(""));
	return 0;
}

image-20230506142744458

二、strlen仿真

字符串常用于文字处理,常用且实用。因此其常用功能被封装成了一套API。可通过string.h进行使用。

通过仿真我们可以理解其函数内部工作机制的细节

定义一个my_strlen函数,模仿strlen函数计算出字符串的长度

不使用标准函数strlen计算,使用自己定义的my_strlen函数

声明:

size_t my_strlen(const char* str);	//内容不可改  const char*称为 字符串常量

1.下标方式定义:

size_t my_strlen(const char* str)
{
	int len;
	for (len = 0; str[len]; len++);
	return len;
}

2.指针方式定义:

size_t my_strlen(const char* str)
{
	const char* p = str;
	while (*p) p++;
	return p - str;	//字符串最后一位地址减去首地址就是字符串长度
}

调用测试:

#include <stdio.h>
#include <string.h>
size_t my_strlen(const char* str);	//内容不可改  const char*称为 字符串常量
int main()
{
	/* 如何得到字符串的长度 */
	 char str1[] ="Hello";
	 char *p1 = "Hello";
	 char *p2="Hello";
	 printf("%d\n", my_strlen(str1));
	 printf("%d\n", my_strlen("TianXi"));
	 printf("%d\n", my_strlen(++p1));
	 printf("%d\n", my_strlen(""));
	return 0;
}

size_t my_strlen(const char* str)
{
	
	//1 下标方式
	int len;
	for (len = 0; str[len]; len++);
	return len;
	//2  指针方式
	const char* p = str;
	while (*p) p++;
	return p - str;
}

运行结果:

与原先的strlen函数输出结果相同:

image-20230506143126716

【注意:】‘\0’不被计算在字符串长度内。但在数组中,‘\0’是占一个数组成员空间的。即str1的数组长度为6,但字符串长度为5。

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!

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

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

相关文章

AB跳转轮询,让支付收款更加安全

伴随跨境电商行业对出海用户运营精细化的要求愈发严格&#xff0c;移动支付作为一个快速发展的领域&#xff0c;很快就进入了“高台期”&#xff0c;这也意味着市场对于支付环节提出了更多新的要求——不只是能收款&#xff0c;还要收款更智能、服务更全面。 但事实上&#xff…

数据链路层的重点协议

数据链路层的重点协议 &#x1f50e;认识以太网以太网帧格式 &#x1f50e;认识MTU&#x1f50e;结尾 &#x1f50e;认识以太网 “以太网” 不是一种具体的网络, 而是一种技术标准. 既包含了数据链路层的内容, 也包含了一些物理层的内容(例如规定了网络拓扑结构, 访问控制方式…

Windows平台下把Julia语言的程序编译打包为.exe可执行文件

一、创建工程 1.在D盘(其它盘亦可)目录新建一个工程文件&#xff1a;Julia Projects&#xff08;自定义名称&#xff09; 目录即 D:\Julia Projects 2.打开Atom IDE编辑器 --->File--->Add Project Folder...--->选择刚刚新建的文件夹Julia Projects 3.右键Julia P…

评判需求优先级5大规则和方法(纯干货):

在划分用户需求时&#xff0c;需秉承需求任务紧跟核心业务指标&#xff0c;按照一定的规则和方法进行优先级的划分。 常见评判需求优先级规则有&#xff1a;四象限法则、KANO模型、二八原则、产品生命周期法、ROI评估法。 一、四象限法则 四象限法则是以【重要】和【紧急】程度…

OPC UA/DA协议库open62541的win10下,cmake+MinGW/VC编译

目录 一、下载源码 二、编译源码 三、案例编译 3.1 工程目录 3.2 server端 3.3 client端 3.4 程序运行 一、下载源码 win10系统&#xff0c;安装git工具 下载open62541库源码&#xff0c;该源码是MPLv2的License git clone --recursive https://github.com/open62541/open6…

MobileNet(V1、V2、V3)入门

MobileNet 良好的移植性 可以很好的使用在移动设备上做分类、检测、分割等任务 深度可分离卷积&#xff08;v1核心&#xff09; 经典卷积算法中&#xff0c;输入的通道数要和过滤器的保持一致&#xff0c;这样很耗费参数 深度可分离卷积 第一步&#xff1a;有多少个输入&a…

Linux学习记录——이십이 进程信号(1)

文章目录 1、了解信号2、了解信号处理3、信号产生1、键盘按键产生2、系统接口产生3、软件条件产生4、硬件异常 4、Core和Term的区别5、信号保存1、在系统中的表现形式2、信号集操作函数1、sigprocmask2、sigpending 6、重谈地址空间7、信号处理与捕捉sigaction 1、了解信号 信…

数据挖掘、数据分析——异常值处理、归一化处理

数据&#xff1a; # 下载需要用到的数据集 !wget http://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/Industrial_Steam_Forecast/zhengqi_test.txt !wget http://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/Industrial_Steam_Forecast/zhengqi_train.txt数据异常值分…

【Python】flask实现登录注册

一、jinjia2 1、控制结构 控制结构 Flask中的Jinja2模板提供了多种控制结构&#xff0c;通过这些控制结构可以改变模板的渲染过程。例如&#xff0c;下面展示的条件控制语句。 2、使用flask成功渲染到模板 【首先你要】 首先要创建一个templates目录&#xff0c;这里面放想要渲…

构造函数的复习,析构函数,拷贝构造函数与由此关于引用的思考

TIPS 在类当中不受访问限定符的限制&#xff0c;在类外面才会受到限制由于内存栈区的使用习惯是先使用高地址&#xff0c;再使用低地址&#xff1b;因此比方说有两个实例化对象依次创建&#xff0c;并且这两个实例化对象当中都有析构函数&#xff0c;也就是当退出销毁的时候&a…

MySQL数据库基础表格——增删改查(上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

有哪些网络安全小知识可以科普?

每日畅游在网络世界中的你&#xff0c;可曾遇到过计算机莫名中毒、文档意外丢失、黑客异常攻击、网络行骗诈骗、个人信息泄露等风险和危害&#xff1f;一起来看看这些你不得不知道的网络安全小知识吧&#xff01; 如何防范病毒或木马的攻击&#xff1f; 1. 为计算机安装杀毒软…

synchronized 关键字基础总结

synchronized 关键字 说一说你对 synchronized 关键字的理解&#xff1f; synchronized 翻译成中文是同步的的意思&#xff0c;主要解决的是多个线程之间访问资源的同步性&#xff0c;可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。 在 Java 早期版本中&a…

第一眼看到就喜欢上了

有多少小伙伴是被标题 骗 吸引进来的呢&#xff0c;小编可不是标题党。 今天给大家推荐的是一款开源3D 博客&#xff0c;确实是第一眼看到就喜欢上了。 相信大家跟我一样&#xff0c;曾经可能花费大量的时间和精力打造过自己的专属博客。只为自己的博客看上去与众不同&#x…

2023Java商城毕业设计(附源码和数据库文件下载链接)Spring Boot + mysql + maven + mybatis-plus

2023Java商城毕业设计Spring Boot mysql maven mybatis-plus 用户注册用户登录修改密码商品列表&#xff08;分类模糊查询&#xff09;个人信息用户信息修改订单信息添加至购物车商品列表商铺详情商品详情商铺列表 资源目录如下&#xff1a;&#xff08;源码sql文件&#xf…

scratch判断亲和数 中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析2023年3月

目录 scratch判断亲和数 一、题目要求 1、准备工作 2、功能实现 二、案例分析 <

案例分享|CPU监控异常

CPU使用率监控很关键&#xff0c;综合反应系统的负载情况&#xff0c;是监控的重要指标之一。CPU的使用率&#xff0c;对业务系统性能有重要的影响&#xff0c;根据CPU使用率监控&#xff0c;可以对系统或应用进一步分析调优。 4月25日22点&#xff0c;平台收到某县级医院HIS数…

回炉重造十二----网络文件共享服务

网络文件共享服务 1、FTP文件传输协议 1.1 FTP工作原理 FTP的20和21端口的区别 20端口是用来传输数据的 21端口是客户端用来连接FTP服务器 主动模式&#xff08;PORT&#xff09;&#xff1a; 客户端连接到FTP服务端的21号端口&#xff0c;发送用户名和密码当客户端成功登…

对线面试官,JUC面试专题强化

一、AQS高频问题 1.1 AQS是什么&#xff1f; AQS是JUC下大量工具的基础类&#xff0c;很多工具都基于AQS实现的&#xff0c;比如lock锁&#xff0c;CountDownLatch&#xff0c;Semaphore&#xff0c;线程池等等都用到了AQS。 AQS中有一个核心属性state&#xff0c;还有一个…

Android 自定义View实战—制作一个简易输入框

这次我们来做一个简易输入框&#xff0c;可以用于密码输入和验证码输入。 依然在EasyView中进行创建&#xff0c;在com.easy.view下新建一个EasyEditText&#xff0c;继承自View &#xff0c;实现里面的构造方法。 ① 构造方法 然后我们继承自View&#xff0c;重写里面的构造…