【C语言】关于字符串函数的使用及模拟实现(1)

一、字符串追加

1.1  库函数srecat的使用

5aa90df70ab34ec3b116dfffbd230411.png

 1.2  库函数strncat的使用

165ebea84fed4ab895ead75dd7d9a7ae.png

1.3  模拟实现库函数 strcat 及 strncat

由上可知,字符串追加的原理是找到所添加字符串的 \0 位置,再对其进行添加。

代码1、

526b82401c39455c888dfe9a69968842.png

637a011806a14937815f648bbeb87e7e.png

代码2、

d7b5e02726ee4b51a68328216bb7a6ad.png

 


 

二、字符串查找

2.1  库函数strstr的使用

使用strstr函数可以快速的定位到所查找字符串的地址。

26c0c74f68c941e59d8da67c9f3a620e.png

bfca0a3ec95c4e60992688048ed4790a.png

2.2  模拟实现库函数 strstr

//模拟实现字符串查找
#include<stdio.h>
char* my_strstr(const char* a,const char* b){
	const char* a1 = a;  
	const char* b1 = b;  
	const char* p = a;    // 记录从字符串a开始查找的位置
	if(*b == '\0'){
		return (char*)a;
	}
	while(*p){
		a1 = p;
		b1 = b;  // 重置指向字符串b的指针
		while(*a1 && *b1 && (*a1 == *b1)){
			a1++;
			b1++;
		}
		if(*b1 == '\0'){ //表示已查完,返回开始查找的位置
			return (char*)p;
		}
	p++;
	}
	return NULL; //未查找到
}

int main(){
	char a[20] = "hongshaorou";
	char b[] = "shao";
	char * ret = my_strstr(a,b);
	if(ret == NULL){
		printf("没找到");
	}else{
		printf("找到了:%s\n",ret);	
	}
	return 0;
}

 


 

三、求字符串长度

3.1 库函数strlen的使用

记录 ' \0 ' 之前的字符数。

75be6a32369447c4923261490f583ac6.png

3.2 模拟实现库函数strlen

68bb1b570076487fa4fe2ae12e0f51e6.png

注意:在库函数中strlen的返回类型为suze_t(无符号整型),我们这里的返回类型为int型。

 代码1

#include<stdio.h>
int my_strlen(const char* a){
	int count = 0;
	while(*a){
		a++;
		count++;
	}
	return count;
}

int main(){
	char a[] = "hello";
	int len = my_strlen(a);
	printf("%d\n",len);
	
	return 0;
}

代码2

#include<stdio.h>
int my_strlen(const char* a){
	const char* p = a;
	while(*a){
		a++;
	}
	return (int)(a-p);
}
int main(){
	char a[] = "hello";
	int len = my_strlen(a);
	printf("%d\n",len);
	return 0;
}

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Day28:回溯法 491.递增子序列 46.全排列 47.全排列 II 332.重新安排行程 51. N皇后 37. 解数独

491. 非递减子序列 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情…

用含成员函数的类,分别输入和输出各对象中的时间(时:分:秒)

编写程序&#xff1a; 运行结果&#xff1a; 注意&#xff1a; &#xff08;1&#xff09;在主函数中调用两个成员函数时&#xff0c;应指明对象名(t1,t2)。表示调用的是哪一个对象的成员函数。t1.display()和t2.display()虽然都是调用同一个 display函数&#xff0c;但…

最长考拉兹序列

题目&#xff1a; 考虑如下定义在正整数集上的迭代规则&#xff1a; n n/2 (若n为偶数) n 3n1 &#xff08;若n为奇数&#xff09; 从13开始&#xff0c;可以迭代生成如下的序列&#xff1a; 13 40 20 10 5 16 8 4 2 1 可以看出这个序列&#xff08;从13…

pytest测试框架pytest-xdist插件并发执行测试用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍下插件pytest-xdist&#xff0c;主要是提供并行测试、分布式测试、循环测试等功能&#xff0c;可以加快测试速度。 pytest-xdist官方显示没有严格的python和pytest版本限制。 pytest-xdist安装 使用pip命令安装: pip…

高中数学:数列-等差数列、等比数列的和与通项公式的关系

一、等差数列 1、通项公式与求和公式 2、性质 性质1 求和公式比上n&#xff0c;依然是一个等差数列。 性质2 等差数列中&#xff0c;每相邻m项和&#xff0c;构成的数列&#xff0c;依然是等差数列&#xff0c;公差&#xff1a;m2d 二、等比数列 1、通项公式与求和公式 a…

「GPT源码探索」:从ChatPaper到学术论文GPT的二次开发实践

前言 本文的前两个部分最早是属于此旧文的《学术论文GPT的源码解读与微调&#xff1a;从ChatPaper到七月论文审稿GPT第1版》&#xff0c;但为了每一篇文章各自的内容更好的呈现&#xff0c;于是我今天做了以下三个改动 原来属于mamba第五部分的「Mamba近似工作之线性Transfor…

数据库原理与安全复习笔记

1 概念 产生与发展&#xff1a;人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点&#xff1a;数据的管理者&#xff08;DBMS&#xff09;&#xff1b;数据结构化&#xff1b;数据共享性高&#xff0c;冗余度低&#xff0c;易于扩充&#xff…

自动控制原理出射角计算

背景&#xff1a;突然发现自己出射角不会算 被减数是零点到极点的角度&#xff0c;减数是极点到极点的角度

毕业设计——可视化实验仿真平台

该程序用于毕业设计&#xff0c;架构为前后端分离技术&#xff0c;涉及技术包括vue3&#xff0c;SpringBoot&#xff0c;spring-secrity&#xff0c;Redis&#xff0c;需要者进群769119544进行相关咨询。 程序分为三个角色&#xff1a;学生、老师、管理员。使用了spring-secrit…

Vision Pro的3D跟踪能力:B端应用的工作流、使用教程和经验总结

Vision Pro的最新3D跟踪能力为工业、文博、营销等多个B端领域带来了革命性的交互体验。本文将详细介绍这一功能的工作流、使用教程,并结合实际经验进行总结。 第一部分:工作流详解 一、对象扫描 使用Reality Composer iPhone应用程序对目标对象进行3D扫描,如吉他或雕塑,…

从关键新闻和最新技术看AI行业发展(2024.6.3-6.16第二十五期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流学习&#x1f4aa; 欢迎大家关注Rocky的公众号&…

一键智能整理TXT文档,高效删除连续行,轻松提升工作效率与数据管理效能

信息爆炸的时代&#xff0c;TXT文档作为我们日常工作中不可或缺的一部分&#xff0c;承载着大量的数据和信息。然而&#xff0c;随着文档内容的不断增加&#xff0c;连续重复的行数也逐渐增多&#xff0c;这不仅影响了文档的整洁度&#xff0c;还大大降低了我们处理数据的效率。…

idea添加文档注释

一、easy javadoc插件 在settings的plugins中下载easy javadoc插件。 安装完成后重启idea&#xff0c;再次打开settings界面。会出现easyDoc相关配置。 二、设置模版以及使用 类描述模版参考设置&#xff1a; /** * 类描述 -> * * Author: ywz * Date: $Date$ */ 方法描述…

Vue80-全局路由守卫:前置、后置

一、路由守卫的定义 二、需求 在第三步&#xff0c;做校验&#xff01; 三、代码实现 3-1、前置路由守卫 注意&#xff0c;此时就不能将router一开始就暴露出去了&#xff01; to和from是路由组件的信息。 写法一&#xff1a; 写法二&#xff1a; 缺点&#xff1a;若是路由…

马尔可夫聚类算法

马尔可夫聚类算法&#xff08;Markov Clustering Algorithm&#xff0c;MCL&#xff09;是一种用于图聚类的算法&#xff0c;广泛应用于生物信息学、社交网络分析、推荐系统等领域。 其核心思想是模拟随机游走过程&#xff0c;通过迭代地扩散和收缩图上的概率分布来识别图中的…

Python17 多进程multiprocessing

1.多进程与多线程的区别 在Python中&#xff0c;多线程&#xff08;multithreading&#xff09;和多进程&#xff08;multiprocessing&#xff09;是两种并行执行任务的方式&#xff0c;它们有一些关键的区别&#xff1a; 进程和线程的基本区别&#xff1a; 进程&#xff1a;进…

【ajax基础】回调函数地狱

一&#xff1a;什么是回调函数地狱 在一个回调函数中嵌套另一个回调函数&#xff08;甚至一直嵌套下去&#xff09;&#xff0c;形成回调函数地狱 回调函数地狱存在问题&#xff1a; 可读性差异常捕获严重耦合性严重 // 1. 获取默认第一个省份的名字axios({url: http://hmaj…

第一次接触Swing

学习java版的HslCommunication发现使用的是Swing&#xff0c;所以了解了一下~ 了解&#xff1a; Swing是Java的标准库&#xff08;Java Foundation Classes, JFC&#xff09;的一部分&#xff0c;用于构建桌面应用程序的图形用户界面&#xff08;GUI&#xff09;。它是Java AWT…

Java程序之百鸡百钱问题

题目&#xff1a; 百钱买百鸡的问题算是一套非常经典的不定方程的问题&#xff0c;题目很简单&#xff1a;公鸡5文钱一只&#xff0c;母鸡3文钱一只&#xff0c;小鸡3只一文钱&#xff0c;用100文钱买一百只鸡,其中公鸡&#xff0c;母鸡&#xff0c;小鸡都必须要有&#xff0c;…

JWT介绍及其基本使用

JWT介绍及其基本使用 官网&#xff1a;https://jwt.io/ 什么是JWT 全称&#xff1a;JSON Web Token&#xff08;JSON Web令牌&#xff09; 一个开放标准(RFC 7519) &#xff0c;它定义了一种紧凑和自包含的方式&#xff0c; 用于作为 JSON 对象在各方之间安全地传输信息。此信…