top1编程
← 返回题目
题解

凯撒加密术

1 条题解

  • 0
    @ 2026-8-5 15:42:10

    解题思路

    凯撒加密是古罗马的凯撒大帝用过的一种加密方法:把信里的每个字母,都换成它后面第 1 个字母。a 变 b,b 变 c,……,y 变 z,而 z 要绕回到 a。大写字母也是一样。

    我们只需要遍历字符串的每个字符:

    1. 如果是小写字母 a 到 z:一般情况下直接 c + 1(字符加 1 就是后一个字母),但如果是 z,要特别处理成 a;
    2. 如果是大写字母 A 到 Z:同理,Z 要特别处理成 A;
    3. 其他字符(数字、符号等):保持不变。

    为什么 c + 1 就能得到后一个字母呢?因为字符在内存里就是整数(ASCII 码),a 是 97,b 是 98,所以 'a' + 1 就等于 'b'。

    拿样例来说:abcdz 加密后,a→b,b→c,c→d,d→e,z→a,结果是 bcdea。

    参考代码

    // 用途:凯撒加密术,每个字母变成它的后一个字母
    #include <iostream>
    #include <string>
    using namespace std;
    int main(){
        string s;
        cin>>s; // 字符串中没有空格
        for(char &c:s){ // 用引用,直接修改字符串里的字符
            // 小写字母:z变a,其余加1
            if(c>='a' && c<='z') c = (c=='z') ? 'a' : c+1;
            // 大写字母:Z变A,其余加1
            else if(c>='A' && c<='Z') c = (c=='Z') ? 'A' : c+1;
            // 非字母字符保持不变
        }
        cout<<s<<endl;
        return 0;
    }
    

    复杂度分析

    • 时间:字符串从头到尾扫描一遍,每个字符做常数次运算,时间复杂度是 O(n),n 是字符串长度(不超过 20)。
    • 空间:只用一个字符串,空间复杂度是 O(1)。
    • 1