top1编程
← 返回题目
题解

字符串判等

1 条题解

  • 0
    @ 2026-8-5 16:07:42

    解题思路

    这道题要我们判断两个字符串是否“相等”。这里说的相等有一个特别的规则:如果字符串里含有字母,比较的时候要忽略大小写。

    也就是说,“abc” 和 “ABC” 要算作相等,因为 a 和 A 只是大小写不同。

    怎么忽略大小写呢?C++ 里大写字母和小写字母在 ASCII 码表中是挨着的:

    • 大写字母 'A' 的 ASCII 码是 65,小写字母 'a' 的 ASCII 码是 97;
    • 大写字母 'A' 到 'Z' 是连续的,小写字母 'a' 到 'z' 也是连续的。

    所以如果某个字符是大写字母,我们给它加上 32,就得到了它的小写字母(例如 'A' + 32 = 'a')。把两个字符串的每个字符都先转成小写,再比较,就能忽略大小写了。

    解题步骤:

    1. 先判断两个字符串的长度是否一样,长度不一样肯定不相等;
    2. 长度一样的话,逐个字符比较:把两个字符都转成小写(如果原本是大写),看是否相同;
    3. 只要有一个字符不同,答案就是 no;全部相同才是 yes。

    这种方法叫做“转换后比较”,是处理大小写问题的常用套路。

    参考代码

    // P4590 字符串判等:忽略字母大小写比较两个字符串是否相等
    #include <iostream>
    using namespace std;
    
    int main() {
        string a, b;
        cin >> a >> b;          // 输入两个字符串
        bool ok = true;         // ok 记录是否相等,先假设相等
        if (a.size() != b.size()) ok = false;  // 长度不同一定不相等
        for (int i = 0; ok && i < (int)a.size(); i++) {
            char x = a[i], y = b[i];
            // 大写字母转成小写再比较(ASCII 码加 32)
            if ('A' <= x && x <= 'Z') x += 32;
            if ('A' <= y && y <= 'Z') y += 32;
            if (x != y) ok = false;  // 这一对字符不相等,结果就是 no
        }
        cout << (ok ? "yes" : "no") << endl;
        return 0;
    }
    

    复杂度分析

    两个字符串的长度都不会超过 50,程序只需要把每个字符看一遍,时间大约是 O(n),其中 n 是字符串的长度。额外用到的变量只有几个,空间是 O(1),非常节省。

    • 1