当前位置: 首页 > news >正文

详解字符串比较函数:strcmp函数及其模拟实现

详解字符串比较函数:strcmp函数及其模拟实现!!!

对于字符串比较函数:strcmp函数,想必大家也不会感觉陌生,毕竟在之前就有过接触!虽然很少使用,但是,见面了也能认出来!只不过不太怎么使用过罢了!!

话不多说,笔者下面进入正题,来带领大家回归今日的主题!

strcmp是字符串的比较函数,该比较多不是字符串的长度,而是比较的对应位置的ASCII码值的大小!

使用方法为:

int strcmp (const char* str1 , const char* str2)

对于返回类型为int ,或许不少老铁有着……疑问??为什么返回值会是int(整型)呢??

str1 < str2 : 返回一个小于0的数字:-1

str1 > str2  :返回一个大于0的数字: 1

str1 = str2  :返回0

对于上述不认同的读者,可以参考一下,笔者的代码:

#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abq";
	int ret = strcmp(arr1, arr2);
	printf("%d\n", ret);
	return 0;
}

因为在ASCII码中’c'对应的值小于'q'所对应的值,所以打印的结果为-1

代码的运行结果为:

 但是当arr1[],arr2[]更改数值以后,代码的运行结果也会随之发生改变,所以……嗯!所以返回值为:-1,1,0;没啥大问题!!

#include <stdio.h>
#include <string.h>

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abq";
	
	char arr3[] = "abcd";
	char arr4[] = "abc";

	char arr5[] = "abc";
	char arr6[] = "abc";

	int ret = strcmp(arr1, arr2);
	if (ret > 0)
	{
		printf("arr1>arr2\n");
	}
	else if (ret < 0)
	{
		printf("arr1<arr2\n");
	}
	else
	{
		printf("arr1=arr2\n");
	}
	return 0;
}

但是,对于:arr1[]={'a','b','c'},与arr2[]={'a','b','c'};该如何进行比较??

原因在于:'\0'的位置未知,不知道该怎么……嗯,因此,这就需要我们注意细节!!

下面来对strcmp函数来进行模拟实现!!请各位老铁仔细欣赏!!

#include <stdio.h>
#include <string.h>
#include <assert.h>

int my_strcmp(const char* s1, const char* s2)
{
	assert(s1 && s2);
	while (*s1 == *s2)
	{
		if (s1 == '\0')
		{
			return 0;
		}
		s1++;
		s2++;
	}
	if (*s1 > *s2)
	{
		return 1;
	}
	else
	{
		return -1;
	}
	
}

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

对于该段代码的解析,毕竟没有什么很多的重要内容,想必各位老铁也都能看懂,缺少的仅仅是思路而已,笔者在此就不做更多的讲解!!

代码的运行结果为:

 本篇博客主要内容到此结束!!

相关文章:

  • 【Linux】安装Tomcat以yum方式安装
  • 【羊了个羊】背后的计算机网络原理
  • 面试题--框架篇
  • 字节4面通过,我可以跟面试官要30K吗?
  • Python算法性能分析-时间复杂度
  • java 基本微信小程序的心理咨询服务系统 uniapp 小程序
  • JQ----事件
  • FPGA 20个例程篇:16.HDMI显示彩色风景图
  • 【云原生之Docker实战】使用Docker部署NPS内网穿透工具
  • 应对过载- go-zero源码阅读
  • Python 的“self“参数是什么?
  • 模拟前端ADC芯片LH001-91,用于开发心电、脑电医疗设备
  • CAPL 封装了的SeedKey解锁函数,高复用性
  • 异常数据处理——3σ原则、箱线图
  • vue3.0 + tsx 构建el-button
  • php的引用
  • SegmentFault for Android 3.0 发布
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • CentOS7 安装JDK
  • oldjun 检测网站的经验
  • pdf文件如何在线转换为jpg图片
  • Python中eval与exec的使用及区别
  • spring + angular 实现导出excel
  • 阿里云前端周刊 - 第 26 期
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 基于 Babel 的 npm 包最小化设置
  • 中文输入法与React文本输入框的问题与解决方案
  • UI设计初学者应该如何入门?
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​ssh免密码登录设置及问题总结
  • $.ajax()参数及用法
  • $.ajax()方法详解
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2)STL算法之元素计数
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (超详细)语音信号处理之特征提取
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (六)软件测试分工
  • (译) 函数式 JS #1:简介
  • . NET自动找可写目录
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 分布式技术比较
  • .NetCore项目nginx发布
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .NET中winform传递参数至Url并获得返回值或文件
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @AliasFor注解
  • @Autowired自动装配
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • [APIO2015]巴厘岛的雕塑
  • [C\C++]读入优化【技巧】