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

简介: 你还在用‘>’‘<’‘=’等比较字符串吗?事实上,用大于小于比较字符串的方法是不对的。我们看一下两种常见的错误方法

两种常见的错误比较方法

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

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

#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 *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;
}

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

相关文章
|
10天前
|
NoSQL 程序员 Redis
C语言字符串的设计缺陷
C语言字符串的设计缺陷
21 1
|
5天前
|
C语言
C语言学习笔记之初识字符串
C语言学习笔记之初识字符串
19 5
|
5天前
|
C语言
c语言左旋字符串问题(不同方法超详细解答)
c语言左旋字符串问题(不同方法超详细解答)
7 1
|
24天前
|
安全 编译器 C语言
C语言学习记录——字符串相关函数及部分模拟(strcmp、strncmp、strncat、strncpy、strstr、strtok、strerror)
C语言学习记录——字符串相关函数及部分模拟(strcmp、strncmp、strncat、strncpy、strstr、strtok、strerror)
15 1
|
24天前
|
C语言
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
14 1
|
2天前
|
安全 C语言 开发者
C语言中的字符串
C语言中的字符串
5 0
|
24天前
|
算法 C语言
C语言——oj刷题——字符串左旋和轮转数组
C语言——oj刷题——字符串左旋和轮转数组
14 1
|
30天前
|
存储 C语言
字符串的引用方式在C语言中的探讨
字符串的引用方式在C语言中的探讨
23 5
|
1月前
|
C语言
C语言基础 - 字符串/字符数组最易错考点
该文探讨了C语言中&#39;\0&#39;字符对字符串和字符数组的重要性,以及`strlen`和`sizeof`的区别。&#39;\0&#39;作为字符串的结束标志,确保了正确打印和计算字符串长度。示例代码显示,未包含&#39;\0&#39;的字符数组打印时可能出现随机值。`strlen`计算字符串长度,不包含&#39;\0&#39;,而`sizeof`返回变量或数组的总字节数,包括&#39;\0&#39;。文章还提醒注意转义字符在字符串中的影响,例如`\t`和`\62`。最后总结了字符串和字符数组处理时应注意的要点。
33 0
C语言基础 - 字符串/字符数组最易错考点
|
15天前
|
C语言
C语言——字符串操作函数
C语言——字符串操作函数
10 0