【C语言】有一行电文,已按下面规律译成密文:A->Z a->z即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。要求编写程序将密文译回原文并输出。请使用数组实现。
时间: 2024-11-06 14:24:10 浏览: 48
在C语言中,你可以通过创建一个字符数组来实现这个解密任务。首先,你需要两个字符数组,一个存储原始字母,另一个存储加密后的字母。然后遍历输入的密文,对于每个字符,检查它是否在字母范围内。如果是字母,则使用给定的规则将其还原;如果不是字母,则保持原样。
以下是一个简单的示例程序:
```c
#include <stdio.h>
#include <ctype.h>
char encrypt(char c) {
if (isalpha(c)) { // 检查字符是否为字母
return ((c >= 'a') && (c <= 'z')) ? c + 25 : c - ('a' - 1); // 如果是小写字母,加25;如果是大写字母,减去'a'与'A'之间的差值
}
else {
return c; // 非字母字符不变
}
}
char decrypt(char encrypted_char) {
if (isalpha(encrypted_char)) {
return ((encrypted_char >= 'A') && (encrypted_char <= 'Z')) ? encrypted_char - 24 : encrypted_char + ('a' - 1); // 解密规则与加密相反
}
else {
return encrypted_char;
}
}
int main() {
char input[100]; // 输入的密文
fgets(input, sizeof(input), stdin); // 从用户输入读取密文
input[strcspn(input, "\n")] = '\0'; // 去除换行符
for (size_t i = 0; input[i] != '\0'; ++i) {
input[i] = decrypt(input[i]); // 对每个字符进行解密
}
printf("原文: %s", input);
return 0;
}
```
在这个程序中,`encrypt`函数用于加密,`decrypt`函数负责解密。在`main`函数里,我们读入一行密文,然后逐个字符解密,并打印出结果。
阅读全文