题解
凯撒加密术
1 条题解
-
0
解题思路
凯撒加密是古罗马的凯撒大帝用过的一种加密方法:把信里的每个字母,都换成它后面第 1 个字母。
a变b,b变c,……,y变z,而z要绕回到a。大写字母也是一样。我们只需要遍历字符串的每个字符:
- 如果是小写字母
a到z:一般情况下直接c + 1(字符加 1 就是后一个字母),但如果是z,要特别处理成a; - 如果是大写字母
A到Z:同理,Z要特别处理成A; - 其他字符(数字、符号等):保持不变。
为什么
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