IE盒子

搜索
查看: 154|回复: 1

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

[复制链接]

3

主题

8

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2023-1-5 15:25:30 | 显示全部楼层 |阅读模式
两种常见的错误比较方法

你还在用‘>’‘<’‘=’等比较字符串吗?
事实上,用大于小于比较字符串的方法是不对的。我们看一下两种常见的错误方法
#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 < arr2)
                {
                        printf("arr1<arr2\n");
                        break;
                }
                else if (arr1 > arr2)
                {
                        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 *string1, const 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;
}以上就是字符串比较大小的讲解,有错误的地方希望大家能批评指正
回复

使用道具 举报

3

主题

9

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2025-5-17 07:58:18 | 显示全部楼层
我了个去,顶了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表