请给出问题1的具体代码
时间: 2024-10-28 08:07:35 浏览: 14
以下是针对问题1 "电报加解密" 的C++代码实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
// 加密函数
string encrypt(const string& s) {
string result = "";
for (char c : s) {
if (islower(c)) {
// 小写字母转换为大写字母并向前移一位
result += ((c - 'a' + 1) % 26) + 'A';
} else if (isupper(c)) {
// 大写字母转换为小写字母并向后移一位
result += ((c - 'A' - 1 + 26) % 26) + 'a';
} else if (isdigit(c)) {
// 数字向后移一位
result += ((c - '0' + 1) % 10) + '0';
} else {
// 其他字符不变
result += c;
}
}
return result;
}
// 解密函数
string decrypt(const string& s) {
string result = "";
for (char c : s) {
if (islower(c)) {
// 小写字母转换为大写字母并向后移一位
result += ((c - 'a' - 1 + 26) % 26) + 'A';
} else if (isupper(c)) {
// 大写字母转换为小写字母并向前移一位
result += ((c - 'A' + 1) % 26) + 'a';
} else if (isdigit(c)) {
// 数字向前移一位
result += ((c - '0' - 1 + 10) % 10) + '0';
} else {
// 其他字符不变
result += c;
}
}
return result;
}
int main() {
int T;
cin >> T;
cin.ignore(); // 忽略输入缓冲区中的换行符
while (T--) {
string encryptedMessage;
getline(cin, encryptedMessage);
cout << decrypt(encryptedMessage) << endl;
}
return 0;
}
```
### 代码解释
1. **加密函数 `encrypt`**:
- 遍历输入字符串的每一个字符。
- 如果是小写字母,将其转换为大写字母并向前移一位。
- 如果是大写字母,将其转换为小写字母并向后移一位。
- 如果是数字,将其向后移一位。
- 其他字符保持不变。
2. **解密函数 `decrypt`**:
- 遍历输入字符串的每一个字符。
- 如果是小写字母,将其转换为大写字母并向后移一位。
- 如果是大写字母,将其转换为小写字母并向前移一位。
- 读取输入的电报数量 `T`。
- 使用 `cin.ignore()` 忽略输入缓冲区中的换行符。
- 循环读取每一行加密的电报信息,并调用 `decrypt` 函数进行解密,然后输出解密后的结果。
希望这段代码能够帮助你理解和解决这个问题。如果有任何疑问,欢迎继续提问。
阅读全文