• C++
  • C++string字符串比较大小的规则

  • @ 2025-5-7 9:07:05

在C++里,string类存在于标准库中,要使用它就得包含<string>头文件,并且可以使用using namespace std;来避免每次都写std::。下面详细介绍string字符串比较大小的规则,同时给出使用示例。

比较规则

string对象的比较是基于字典序(也叫字母序)开展的,也就是按字符的 ASCII 码值逐个比较字符串里的字符。具体规则如下:

  1. 逐字符比较:从两个字符串的第一个字符开始比较,若它们的 ASCII 码值不同,那么 ASCII 码值小的字符所在的字符串就小。
  2. 长度相同且对应字符相同:若两个字符串长度相同,并且对应位置的字符都一样,那么这两个字符串相等。
  3. 部分字符相同但长度不同:若两个字符串前面的部分字符都相同,不过其中一个字符串更长,那么较短的字符串较小。

示例代码

#include <iostream>
#include <string>

using namespace std;

int main() {
    string str1 = "apple";
    string str2 = "banana";
    string str3 = "apple";

    // 使用比较运算符进行比较
    if (str1 < str2) {
        cout << str1 << " 小于 " << str2 << endl;
    }

    if (str1 == str3) {
        cout << str1 << " 等于 " << str3 << endl;
    }

    // 使用 compare 函数进行比较
    int result = str1.compare(str2);
    if (result < 0) {
        cout << str1 << " 小于 " << str2 << " (使用 compare 函数)" << endl;
    }

    result = str1.compare(str3);
    if (result == 0) {
        cout << str1 << " 等于 " << str3 << " (使用 compare 函数)" << endl;
    }

    return 0;
}

代码解释

  1. 头文件和命名空间
    • #include <iostream>:用于输入输出操作。
    • #include <string>:用于使用string类。
    • using namespace std;:这样就能直接使用标准库中的类和函数,无需每次都写std::
  2. 字符串比较
    • 比较运算符><==等比较运算符可直接用于比较string对象。
    • compare函数string类的compare函数也能用于比较字符串,它会返回一个整数:
      • 若返回值小于 0,表明第一个字符串小于第二个字符串。
      • 若返回值等于 0,表明两个字符串相等。
      • 若返回值大于 0,表明第一个字符串大于第二个字符串。

通过上述示例,你能够了解string字符串比较大小的规则和使用方法。

1 条评论

  • @ 2025-5-7 9:08:05

    在C++中,std::string的比较规则基于字典序(Lexicographical Order),即逐个字符按ASCII码值从左到右比较。以下是详细规则和示例:

    一、比较规则

    1. 逐字符比较
      从第一个字符开始逐个比较,直到找到不同的字符或其中一个字符串结束:
      • 若当前字符相同,则继续比较下一个字符;
      • 若当前字符不同,则根据ASCII码值判断大小;
      • 若一个字符串先结束,则较短的字符串视为更小。
    2. 大小写敏感
      默认情况下,比较区分大小写。例如:
      • "Apple" > "apple"(因为'A'的ASCII码为65,'a'为97,65 < 97,所以"Apple"的第二个字符'A'小于"apple"的第二个字符'a',但第一个字符'A'与'a'比较时,"Apple"整体更小)。
    3. 长度影响
      若前缀字符完全相同,较短的字符串更小。例如:
      • "abc" < "abcd"(前三个字符相同,但"abc"更短)。

    二、比较方法

    1. 使用比较运算符(推荐) std::string重载了以下运算符:==!=>=<=
      示例:
    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        string str1 = "Hello", str2 = "hello", str3 = "Hello";
        cout << (str1 == str3) << endl;  // 输出1(true)
        cout << (str1 < str2) << endl;   // 输出1(true,因'H' < 'h')
        cout  str3) << endl;   // 输出0(false)
        return 0;
    }
    
    1. 使用compare()函数 compare()返回整数,规则如下:
    • 0:两字符串相等;
    • 负数:调用字符串小于参数字符串;
    • 正数:调用字符串大于参数字符串。 示例:
    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        string A = "aBcdef", B = "AbcdEf";
        int result = A.compare(B);  // 比较整个字符串
        cout  B,因第二个字符'B' > 'b')
        // 比较子串:A从下标1开始的5个字符与B从下标4开始的2个字符
        result = A.compare(1, 5, B, 4, 2);
        cout << result << endl;     // 输出-1("Bcdef" < "Ef")
        return 0;
    }
    

    三、不区分大小写的比较 若需忽略大小写,可先将字符串转换为统一大小写再比较:

    #include <algorithm>
    #include <cctype>
    #include <string>
    using namespace std;
    string toLower(const string& str) {
        string result = str;
        transform(result.begin(), result.end(), result.begin(), ::tolower);
        return result;
    }
    int main() {
        string s1 = "Hello", s2 = "hello";
        if (toLower(s1) == toLower(s2)) {
            cout << "相等" << endl;  // 输出相等
        }
        return 0;
    }
    

    四、关键点总结

    1. 字典序规则:逐字符按ASCII码比较,较短字符串更小。
    2. 大小写敏感:大写字母在ASCII中比小写字母小(如'A'(65) < 'a'(97))。
    3. 灵活工具:compare()支持子串比较,运算符更简洁。 通过以上方法,可以高效实现字符串的大小比较。
    • 1