字符串比较原理(strcmp,string)

52 篇文章 1 订阅
41 篇文章 10 订阅

字符串比较分为两种情况,一种是单个字符比较大小,一种是多个字符构成的字符串整体比较大小。

字符与字符串比较原理:

字符串与字符比较原理其实都是比较单个字符的ASCII码值。

如果单纯比较长度,直接调用类似于strlen()之类的函数就可以,加以比较即可. 如果比较字符串的大小,则比较的是字符的ASCII编码的大小.你搜索一下ASCII码表就可以得知每一个ASCII字符的大小.

在比较字符串时,设置一个计数器,从零开始,一直循环到最短的那个字符结束,一位一位进行比较,

1.如果 字符串1的第n位的ASCII码值 等于 字符串2的第n位的ASCII码值 则 继续比较下一位

2.如果 字符串1的第n位的ASCII码值 大于 字符串2的第n位的ASCII码值 则 输出结果:1,表示字符串1 > 字符串2;

3.如果 字符串1的第n位的ASCII码值 小于 字符串2的第n位的ASCII码值 则 输出结果:-1 表示字符串1 < 字符串2;

4.如果 每一位的ASCII码值都相等,而且长度相同, 则 输出结果:0 表示字符串1 == 字符串2;

5.如果 字符串1是字符串2的前m位,例如 abcd 与abcdef 比较, 则 字符串1<字符串2. 原因是,到第5位时,字符串1的ASCII值是0,而字符串2的ASCII值为'e',即十进制的101,当然是字符串2大了. 具体到 cds和lesoqd 从第一位开始,'c'和'l'比较,当然是'c' < 'l'了,所以,"cds" < "lesoqd"

1.字符比较大小

字符比较其实就是比较两个字符的ASCII码值大小(ASCII码表

示例:直接比较大小

char c1 = 'a';
char c2 = 'A';
if (c1 > c2)
{
   cout << "c1>c2" << endl;
}
if (c1==c2)
{
    //相等
}

2.字符串比较大小

1.可以使用C语言中的Strcmp函数

 Strcmp

描述

C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

参数

  • str1 -- 要进行比较的第一个字符串。
  • str2 -- 要进行比较的第二个字符串。

返回值

该函数返回值如下:

  • 如果返回值 < 0,则表示 str1 小于 str2。
  • 如果返回值 > 0,则表示 str2 小于 str1。
  • 如果返回值 = 0,则表示 str1 等于 str2。

示例:

#include <stdio.h>
#include <string.h>
 
int main ()
{
   char str1[15];
   char str2[15];
   int ret;

   strcpy(str1, "abcdef");
   strcpy(str2, "ABCDEF");
 
   ret = strcmp(str1, str2);
 
   if(ret < 0)
   {
      printf("str1 小于 str2");
   }
   else if(ret > 0) 
   {
      printf("str2 小于 str1");
   }
   else 
   {
      printf("str1 等于 str2");
   }
   
   return(0);
}

 

2.使用c++ Stl中的sring类(比较string类的对象即可)

示例:

#include<iostream>
#include<string>
using namespace std;

int main(){
    string str1("235");
    string str2("121");

    bool result;
    result = str1 > str2;
    cout<<result<<endl;         // 1

    str1 = "1111";
    result = str1 > str2;
    cout<<result<<endl;         // 0

    str1 = "111";
    result = str1 > str2;
    cout<<result<<endl;         // 0

    return 0;
}

参考资料:https://blog.csdn.net/djimon/article/details/4129191

https://blog.csdn.net/jason_cuijiahui/article/details/79038468

百度百科

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值