【C语言 模拟实现strcmp函数】

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

C语言之模拟实现strcmp函数

前言:

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

/知识点汇总/

1、介绍strcmp函数

函数原型 :int strcmp( const char *string1, const char *string2 );
函数功能 :字符串比较大小(不是比较长度,而是比较对应位置上的字符大小,即ASCII码值),返回值类型为int
头文件 :<string.h>
返回值标准规定 :ASCLL码值

①.第一个字符串大于第二个字符串,则返回大于0的数字

②.第一个字符串等于第二个字符串,则返回0

③.第一个字符串小于第二个字符串,则返回小于0的数字

使用注意事项

不是比较长度,而是比较对应位置上的字符大小,即ASCII码值
示例代码1如下

c 复制代码
#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abq";
	int ret = strcmp(arr1, arr2);
	printf("%d\n", ret);//-1,第一个字符串比第二个字符串小,返回小于零的数值
	return 0;
}

2、模拟实现strcmp函数

c 复制代码
#include <stdio.h>
#include <string.h>

int my_strcmp(const char* str1,const char* str2)
{
	assert(str1 && str2);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

int main()
{
	char arr1[] = "abc";
	char arr2[] = "abq";
	if (my_strcmp(arr1, arr2) > 0)
	{
		printf(">\n");
	}
	else
	{
		printf("<=\n");
	}
	return 0;
}

解释说明

1.assert是断言,参数为指针,防止传参过来是空指针避免野指针的问题

2.当*str1 == *str2则指针继续移动,直到出现不同的字符后,用指针解引用后的值相减,也就是字符的ASCII码值相减,得到的值正好也满足返回值类型int

3、结语

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

相关推荐
寂空_12 分钟前
【算法笔记】动态规划基础(一):dp思想、基础线性dp
c++·笔记·算法·动态规划
全栈老李技术面试13 分钟前
【高频考点精讲】JavaScript中的访问者模式:从AST解析到数据转换的艺术
开发语言·前端·javascript·面试·html·访问者模式
nenchoumi311920 分钟前
LLM 论文精读(二)Training Compute-Optimal Large Language Models
论文阅读·人工智能·笔记·学习·语言模型·自然语言处理
广龙宇21 分钟前
【一起学Rust】使用Thunk工具链实现Rust应用对Windows XP/7的兼容性适配实战
开发语言·windows·rust
xiao--xin24 分钟前
计算机网络笔记(六)——1.6计算机网络的性能
笔记·计算机网络·带宽·计算机基础·性能指标·吞吐量·时延
jerry20110833 分钟前
R语言之rjava版本不匹配解决方法
开发语言·r语言
拓端研究室TRL36 分钟前
PYTHON用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据
开发语言·python
长流小哥1 小时前
Linux网络编程 从集线器到交换机的网络通信全流程——基于Packet Tracer的深度实验
linux·c语言·网络
无畏烧风1 小时前
[Qt]双击事件导致的问题
开发语言·qt
CheungChunChiu1 小时前
Qt 容器类使用指南
linux·开发语言·c++·qt·容器