《strcmp() 与 strncmp() 区别》干货满满!!!

🤩个人主页:小光死嗑C++😇
😃本人介绍:一名机械生非要找死学计算机,c++爱好者,正在c++道路上探索,愿意拿出一百二十的精力去与C++死磕到底!
😃文章难易程度:本人的文章没有貂蝉那么美,没有吕布那么强,通俗点说,小光的文章并不像那些大牛一样那么神奇,没有那么高深的算法,只是对自己所掌握的内容进行总结、梳理,最后一步一步细细细的写出来。所以不管是入门的小白,还是要复习牛逼的大佬,都是可以非常容易理解的希望各位不要嫌我啰嗦!
😆结尾:最后说一点,小光的文章可能会有点不一样,只为了主打你在阅读文字繁多的资料时也可以让你开开心心的浏览!

🎉1.strcmp

在这里插入图片描述

在这里插入图片描述

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

int strcmp 表示最后返回一个整型值

const char * str1 表示接受第一个待比较的字符串首地址

const char * str2 表示接受第二个待比较的字符串的首地址(注:因为我们只是对两块空间进行比较,并不进行修改,所以加上const 使逻辑更加缜密)

返回值

1、如果第一个字符串大于第二个字符串会返回一个大于0的值

2、如果第一个字符串小于达尔戈字符串会返回一个小于0的值

3、如果第一个字符串与第二个字符串相等会返回一个0

具体是怎么比的?
在这里插入图片描述

先实现一下strcmp的功能

#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abdef";
	int ret = strcmp(arr1, arr2);
	printf("%d\n", ret);
	return 0;
}

在这里插入图片描述

因为c的ASCII码值比d的ASCII码值小,所以,arr1 就比 arr2小,最后就返回一个小于0的值

🧧干货一:

strcmp()函数首先比较的是第一个字符,如果第一个字符相等的话,会再比较第二个字符,以此类推!直到遇见不一样的字符,如果没有不一样的字符,则两个字符相等返回0

🧧strcmp()的模拟实现

int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1 == *str2)
	{
		if (*str2 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main()
{
	char arr1[] = "abc";
	char arr2[] = "abd";
	int ret = my_strcmp(arr1, arr2);
	printf("%d\n", ret);
	return 0;
}

在这里插入图片描述

🧧干货二:

请看图解:

在这里插入图片描述

所以,千万不要就认为成大于和小于就只返回1和-1,从而写出以下代码:>

在这里插入图片描述

如果要有判断条件也应该是 >0 或者 <0

🧧干货三:

总结以下先前学习的三个以str开头的函数

1.strcpy()

2.strcat()

3.strcmp()

==知识点:==这三个函数好像跟字符串长度都没有关系对不对,不管你用它们那个函数,它们都是以‘\0’来进行结束的,都会直接干到‘\0’,根本不管你有多长,够不够存的下,而我只负责执行到‘\0’,所以这样的函数,在使用的时候要多加注意!!!、

例如:strcpy()

在这里插入图片描述

数组arr2中根本就存不下6个字符,可strcpy()偏偏会向里面拷贝6个字符,虽然产生了报错,但是还是拷贝了过去,加入VS这个平台没有对着个函数进行报错的话,那就会造成大的错误!!!另外两个函数也是一个道理的!

所以库函数中就引入了一些长度受限制的函数

1.strncpy

2.strncat

3.strncmp

前两个已经介绍过了,下面介绍第三个strncmp()

🎉strncmp()

在这里插入图片描述

在这里插入图片描述

它与strcmp()函数大致是一样的,只是参数部分多了一个要比较的字符个数size_t num

下面先使用一下这个代码

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

在这里插入图片描述

🧧干货一:

这个函数的脾气就是你让我比较几个字符,我就给你比较几个字符,绝不会多比较!!!就是非常听话😏,而其他的细节都与strcmp()函数一样,请结合着学习!

🧧strncmp()的模拟实现

int my_strncmp(const char* str1, const char* str2, size_t num)
{
	assert(str1 && str2);
	while (num)
	{
		if (*str1 == *str2)
		{
			str1++;
			str2++;
			num--;
		}
		else
			return *str1 - *str2;
	}
	return 0;

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

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值