【C语言】有一行电文,已按下面规律译成密文:A->Z a->z即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。要求编写程序将密文译回原文,在屏幕上显示密文和原文并写入数据文件
时间: 2024-03-06 12:51:43 浏览: 170
好的,我理解了你的要求。以下是一份 C 语言代码,可以将密文翻译成原文,并将密文和原文写入数据文件。
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_LEN 1000 // 假设密文最长为 1000 个字符
char decrypt(char ch);
int main() {
char cipher[MAX_LEN+1]; // 存储密文
char plain[MAX_LEN+1]; // 存储原文
int i, j;
// 从文件中读取密文
FILE *fp_in = fopen("cipher.txt", "r");
if (fp_in == NULL) {
perror("Failed to open file \"cipher.txt\"");
exit(EXIT_FAILURE);
}
fgets(cipher, MAX_LEN+1, fp_in);
fclose(fp_in);
// 翻译密文
for (i = 0, j = 0; cipher[i] != '\0'; i++, j++) {
plain[j] = decrypt(cipher[i]);
}
plain[j] = '\0'; // 添加字符串结束符
// 在屏幕上显示密文和原文
printf("Cipher: %s\n", cipher);
printf("Plain: %s\n", plain);
// 将密文和原文写入数据文件
FILE *fp_out = fopen("result.txt", "w");
if (fp_out == NULL) {
perror("Failed to open file \"result.txt\"");
exit(EXIT_FAILURE);
}
fprintf(fp_out, "Cipher: %s\n", cipher);
fprintf(fp_out, "Plain: %s\n", plain);
fclose(fp_out);
return 0;
}
// 翻译单个字符
char decrypt(char ch) {
if (isalpha(ch)) {
if (isupper(ch)) {
return 'A' + 'Z' - ch;
} else {
return 'a' + 'z' - ch;
}
} else {
return ch;
}
}
```
这个程序中,`decrypt()` 函数用于翻译单个字符,它首先判断字符是否是字母,如果是则根据大小写转换规则进行翻译,否则直接返回原字符。
主函数中,先从文件中读取密文,然后遍历密文中的每个字符,调用 `decrypt()` 函数进行翻译,将翻译得到的原文存储在 `plain` 数组中。最后在屏幕上显示密文和原文,并将它们写入数据文件。
注意,这个程序假设密文中的每个字符都在 ASCII 码表中,如果密文中包含其他字符,比如中文字符,程序可能无法正确处理。如果需要支持其他字符集,需要对程序进行修改。
阅读全文
相关推荐













