题解
字符加密术
1 条题解
-
0
解题思路
加密的规则有三条:
- 大写字母:把它的 ASCII 码加上 n,得到加密后的字符;
- 小写字母:把它的 ASCII 码减去 n,得到加密后的字符;
- 其他非字母字符(空格、数字、符号等):保持不变。
什么是 ASCII 码?它是计算机给每个字符编的号,比如
'A'是 65,'a'是 97。在 C++ 里可以直接对字符做加减运算,比如'A' + 3就等于'D'。做法:
- 第一行的字符串可能含空格,所以用
getline(cin, s)读一整行;第二行用cin >> n读加密偏移量。 - 用 for 循环遍历字符串的每个字符:
- 判断是不是大写字母:
s[i] >= 'A' && s[i] <= 'Z',是就s[i] += n; - 判断是不是小写字母:
s[i] >= 'a' && s[i] <= 'z',是就s[i] -= n; - 其他字符什么都不做。
- 判断是不是大写字母:
用样例验证:
Tong Cheng 2023,n=3T(84)+3=87=W,o(111)-3=108=l,n-3=k,g-3=d- 空格不变;
C+3=F,h-3=e,e-3=b,n-3=k,g-3=d - 空格不变;
2023是非字母字符,不变
结果就是
Wlkd Febkd 2023,和样例一致。参考代码
#include <iostream> using namespace std; // 用途:字符加密术——大写字母ASCII码+n,小写字母ASCII码-n,其他字符不变 int main() { string s; int n; getline(cin, s); // 第一行的字符串可能含空格,用 getline 读整行 cin >> n; // 第二行是加密的偏移量 n for (int i = 0; i < s.size(); i++) { if (s[i] >= 'A' && s[i] <= 'Z') // 大写字母:ASCII码加 n s[i] += n; else if (s[i] >= 'a' && s[i] <= 'z') // 小写字母:ASCII码减 n s[i] -= n; // 其他非字母字符保持不变,无需处理 } cout << s << endl; return 0; }复杂度分析
- 时间复杂度:字符串长度不超过 500,每个字符只处理一次,所以是 O(n),其中 n 是字符串长度。
- 空间复杂度:用一个字符串存输入,是 O(n)。
这个加密过程非常快,500 个字符瞬间处理完。
- 1