【字符串函数2】

5. strncpy 函数的使用和模拟实现

   选择性拷贝

char * strncpy ( char * destination, const char * source, size_t num );

1.拷贝num个字符从源字符串到目标空间。
2.如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边    追加0   ,直到num个。

测试

int main()
{
	char arr1[] = "abcd";
	char arr2[10] = { 0 };
	strncpy(arr2, arr1, 3);
	
	printf("%s", arr2);
	return 0;
}

结果:

模拟实现:

char* my_strncpy(char* dest, const char* src, size_t num) 
{
	char* ret = dest;//把初始地址放在ret
	assert(dest && src);//两者不能为空值 
	while (num--)
	{
		*(char*) dest = *(char*) src;//  这样也行  * dest = *src;  用char* 是把进行一个字节逐步进行替换
		dest++;
		src++;
	}
	return ret;
}
int main()
{
	char arr1[] = "abcd";
	char arr2[10] = { 0 };
	my_strncpy(arr2, arr1, 3);
	printf("%s", arr2);
	return 0;
}

6.strncat函数的使用和模拟实现    

选择性字符串拼接    拼接后默认添加  ‘\0’

char * strncat ( char * destination, const char * source, size_t num );

1.将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加⼀个 \0 字

2.如果source指向的字符串的⻓度小于num的时候,只会将字符串中到\0 的内容追加到destination指向的字符串末尾

测试

int main()
{
	char arr1[10] = "abcd";
	char arr2[10] = "efg";
	strncat(arr1, arr2, 3); //在arr1后拼接arr2
	printf("%s", arr1);
	return 0;
}

结果:

模拟实现:

char*  my_strncat(char* dest, const char* src, size_t num)
{
	assert(dest && src);
	char* ret = dest;

	//主要是把dest遍历便  到达dest的字符串的结尾  然后把src增加到dest后面
	while (*dest)
	{
		dest++;
	}
	while ((*dest++ = *src++) && num--) {

	}
	*dest = '\0';
	return 0;
}
int main()
{
	char arr1[10] = "abcd";
	char arr2[10] = "efg";
	my_strncat(arr1, arr2, 3); //在arr1后拼接arr2
	printf("%s", arr1);
	return 0;
}

7.strncmp函数的使用

比较:选择性两字符串的比较

int strncmp ( const char * str1, const char * str2, size_t num );

比较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回

int main()
{
	char arr1[10] = "abcd";
	char arr2[10] = "efg";
	int ret=strncmp(arr1, arr2, 3); //再arr1后拼接arr2
	printf("%d",ret);
	return 0;
}

结果:

8.strstr 的使用和模拟实现  

在一个字符串中查找一个字符串

char * strstr ( const char * str1, const char * str2)
 //函数返回字符串str2在字符串str1中第⼀次出现的位置 之后的内容

测试

int main()    
{
	char arr1[] = "this is an apple";
	const char* p = "is";
	char* ret=strstr(arr1, p);
	printf("%s", ret);
	return 0;
}

模拟实现:

char* mystrstr(const char* str1, const char* str2)
{
	//设置两个固定位置的指针
	const char* s1 = NULL;
	const char* s2 = NULL;

	//设置要查找字符串的位置
	const char* cur = str1;
	//首先判断要查找的是否为空
	if (*str2 == '\0')
		return (char*)str1;
	//进行查询
	while (*cur)    //当*cur!='\0'
	{
		s1 = cur;
		s2 = str2;
		//满足以下要求   否则无法查询   原字符串和被查找字符串都不能为 '\0'   
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;     //两者遇到 同时增加
		}
		//当被查找的查到   '\0'  则查找完成
		if (*s2 == '\0')
		{
			return cur;
		}
		cur++;
	}
	return NULL;
}
int main()    
{
	char arr1[] = "this is an apple";
	const char* p = "is";
	char* ret= mystrstr(arr1, p);
	printf("%s", ret);

}

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

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

相关文章

MyBatis-Plus整合达梦数据库

文章目录 1. 环境准备2. 创建Spring Boot项目3. 引入依赖4. 配置数据源5. 配置MyBatis-Plus6. 创建实体类7. 创建Mapper接口8. 创建Service类9. 创建Controller类10. 创建Mapper XML文件11. 测试12. 进一步优化12.1 配置分页插件12.2 配置乐观锁插件13. 总结🎉欢迎来到Java学…

案例学习-存量更新规划实施探索(武汉)

案例学习-存量更新规划实施探索(武汉) 武汉市在早期旧城更新实践中发现零散化的更新往往导致资源配置分散、城市建设破碎化等弊病,特别是由于过于强调项目自身“经济平衡”,在实施过程中也逐步暴露出住宅占比过大、强度偏高、公服…

屹晶微EG3002 单通道功率MOSFET驱动芯片 贴片SOP8

EG3002作为一款功率MOSFET驱动芯片,它的应用领域主要取决于其技术参数和性能特点。根据之前提供的信息,EG3002可能适用于以下领域: 1. 电源管理:用于高效率电源转换器,如开关电源(SMPS)、电池充…

yolov8通过训练完成的模型生成图片热力图--论文需要

源代码来自于网络 使用pytorch_grad_cam,对特定图片生成热力图结果。 安装热力图工具 pip install pytorch_grad_cam pip install grad-cam# get_params中的参数: # weight: # 模型权重文件,代码默认是yolov8m.pt # c…

希亦、添可、石头洗地机哪款好用?2024洗地机深度测评

今年的洗地机市场竞争异常激烈,各大品牌纷纷推出了自己的旗舰产品。这对消费者来说是个好消息,因为有更多的选择空间。然而,面对如此多的优质洗地机,选择合适的一款也成了一种“幸福的烦恼”。 作为一个专业的测评人士&#xff0…

【笔记】【矩阵的二分】668. 乘法表中第k小的数

力扣链接:题目 参考地址:参考 思路:二分查找 把矩阵想象成一维的已排好序的数组,用二分法找第k小的数字。 假设m行n列,则对应一维下标范围是从1到mn,初始: l1; rmn; mid(lr)/2 设mid在第i行&a…

【源码】综合股票币币合约交易所源码/etf交易所源码/美股港股台股交易所源码

支持多国语言 全开源可二开的一个版本!支持虚拟货币 ETF 外汇 美股 A股 港股 台股。 前端是VUE开发(带vue工程源码)后端JAVA开发!搭建也相对简单。 总的来说功能非常强大,适合线上运营的一个版本,有兴趣的可…

Linux--08---挂载分区

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.查看系统磁盘分区情况1.lsblk 查看2.fdisk -l 2.挂载未分区磁盘1. 创建分区2. 格式化分区3. 创建挂载点4. 挂载分区5. 更新 /etc/fstab6.验证挂载 3.修改挂载的磁…

样本学习:当AI遇上“少见多怪”

东汉名臣牟融在其著作《牟子》写道:“少所见,多所怪,睹橐驼,谓马肿背。”意思是见闻少的人遇到不常见的事物就觉得奇怪,见到骆驼也以为是背肿了的马。因此,后人总用“少见多怪”来嘲笑见识浅陋的人。然而&a…

springboot依赖管理和自动配置

依赖管理和自动配置 依赖管理和自动配置依赖管理什么是依赖管理修改自动仲裁/默认版本号 starter场景启动器starter场景启动器基本介绍官方提供的starter第三方starter 自动配置自动配置基本介绍SpringBoot自动配置了哪些?如何修改默认配置如何修改默认扫描包结构resources\ap…

profile-3d-contrib,github三维立体图的使用

图片展示: 提示: 这个profile-3d-contrib存储库有时候会出现问题,导致又有使用这个存储库svg的用户显示出现问题. 参考: https://zhuanlan.zhihu.com/p/681786778 原仓库链接: GitHub - yoshi389111/github-profile-3d-contrib: This GitHub Action creates a Gi…

南通国际高中有哪些?南通惠立学校高中部校长见面日重磅来袭

惠灵顿(中国)自2011年成立以来,一直坚持深耕国际与双语教育,拥有丰厚的办学经验。依托于集团化的深厚经验南通惠立学校于2024-2025学年开设9-11年级,这所南通国际高中为高中学生搭建一个集卓越升学成果、强大师资、纯正…

零散的面试题

★1.java常见的引用类型 强:普通的变量引用 软:内存够时,GC不会主动删除,内存不够时,GC会删除 弱:一旦执行GC就会被删除 虚:用了感觉没用 ★2.JDK1.8新特性 lambda表达式(极大简化了匿名内部类的创建,促进函数式编程的风格)函数式接口(只能有一个抽象方法的接口 )日…

模型 WOOP

说明:系列文章 分享 模型,了解更多👉 模型_思维模型目录。不再拖延和懒惰,让梦想照进现实。 1 WOOP模型的应用 1.1 WOOP模型提高自己健身习惯 如果你想要养成健身的习惯,那么使用WOOP模型来提高自己健身习惯&#xf…

数据库系统概念(第七周 第二堂)(E-R模型转关系模式)

前言 前一堂课我们深入研究了E-R模型的画法和要点,学习E-R模型肯定是为了给数据库表格设计提供帮助。数据库表格设计就是关系模式设计,数据库表就是关系模式的实例化。所以本堂课,我们来看E-R模型如何转为关系模式。 转化原则 转化步骤 转…

深入理解指针(三)

目录 1.字符指针变量 2. 数组指针变量 2.1 数组指针变量是什么? 2.2 数组指针变量怎么初始化 3. ⼆维数组传参的本质 4. 函数指针变量 4.1 函数指针变量的创建 4.2 函数指针变量的使用 4.3 两段有趣的代码 4.3.1 typedef关键字 5. 函数指针数组 6. 转移表 1.字符指…

springboot与flowable(7):流程变量

一、启动时添加流程变量 拿第一个流程图举例,创建一个新的流程定义。 Testvoid contextLoads() {DeploymentBuilder deployment repositoryService.createDeployment();deployment.addClasspathResource("process01/FirstFlow.bpmn20.xml");deployment.…

【枚举】564. 寻找最近的回文数

本文涉及知识点 枚举 LeetCode564. 寻找最近的回文数 给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身)。如果不止一个,返回较小的那个。 “最近的”定义为两个整数差的绝对值最小。 示例 1: 输入: n “123”…

性能测试包括哪些方面?

性能测试、通过自动化测试工具模拟多种正常,峰值,以及异常的负载情况下对系统各项性能指标进行的测试。 负载测试、压力测试、容量测试都属于性能测试。 性能测试指标是衡量系统性能的评价标准 主要关注一些响应时间、并发用户/并发、点击率、吞吐量、…

【CDN】逆天 CDN !BootCDN 向 JS 文件中植入恶意代码

今天在调试代码,突然控制台出现了非常多报错。 这非常可疑,报错指向的域名也证实了这一点。 因为我的 HTML 中只有一个外部开源库(qrcode.min.js),因此只有可能是它出现了问题。 我翻看了请求记录,发现这…