【C语言】正确比较两个字符串

目录

两种常见的错误比较方法

(1)为什么两个字符串不能直接用大于小于号比较?

(2)为什么不能用数组名直接比较

字符串比较大小的实质

两种比较字符串两种方法

(1)难的方法

(2)简单的方法


两种常见的错误比较方法

你还在用‘>’‘<’‘=’等比较字符串吗?

事实上,用大于小于比较字符串的方法是不对的。我们看一下两种常见的错误方法

#include<stdio.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abc";

	if (arr1 < arr2)
	{
		
	}

	if ("abcdef" < "abc")
	{

	}
}

(1)为什么两个字符串不能直接用大于小于号比较?

因为用大于小于号,比较的是字符串的首地址大小,而不是字符串的大小。如上述例子,比较的是"abcdef"中a的地址和"abc"中a的地址。

(2)为什么不能用数组名直接比较

因为数组名代表首元素地址(一般情况下),用数组名比较跟用字符串直接比较性质是一样的,所以用数组名比较也是不对的。当我们把字符串"abcd"赋值给指针p,大家感觉p中存的是什么?是"abcd"吗?不是,是'a'的地址

char* p = "abcd";

字符串比较大小的实质

        比较字符串的大小就是比较每个字符串中对应位置上的字符大小(ASC II码值大小),如果相同,就比较下一对,直到不同或者都遇到'\0'。         

两种比较字符串两种方法

(1)难的方法

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

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abc";

	int i = 0;
	int n1 = strlen(arr1);
	int n2 = strlen(arr2);
	while (n1 && n2)
	{
		if (arr1[i] < arr2[i])
		{
			printf("arr1<arr2\n");
			break;
		}
		else if (arr1[i] > arr2[i])
		{
			printf("arr1>arr2\n");
			break;
		}
		n1--;
		n2--;
		i++;
	}

	if ((n1==0) &&(n2 == 0))
	{
		printf("arr1=arr2\n");
	}
	else if (n1 == 0) {
		printf("arr1<arr2");
	}
	else if (n2 == 0)
	{
		printf("arr1>arr2");
	}

	return 0;
}

(2)简单的方法

在C语言中有个库函数能实现两个字符串的比较,它就是strcmp()函数

int strcmp( const char *string1const char *string2 );

当string1大于string2时返回一个大于0的数,等于返回0,小于返回小于0的数

(strcpy函数详情请参考:strcmp函数

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abc";
	int ret=strcmp(arr1, arr2);
	if (ret > 0)
	{
		printf("arr1>arr2");
	}
	else if (ret < 0)
	{
		printf("arr1<arr2");
	}
	else {
		printf("arr1=arr2");
	}
	return 0;
}

以上就是字符串比较大小的讲解,有错误的地方希望大家能批评指正,别忘了点赞👍+收藏⭐️哦 

      😜  关注我!带来等多精彩🎉🎉

 

  • 118
    点赞
  • 433
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱躺平的威威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值