C语言简单解密

来源:互联网 发布:不醉不会 田馥甄 知乎 编辑:程序博客网 时间:2024/05/16 23:40
输入:
第一行包含一个整数N(1≤N≤1000),表示数据的组数。
每组数据包含两行:
第一行是加密过的信息(不超过1000-个字符)。
第二行是26个大写字母,依次对应字母表:第一个字母对应字母表里的A,第二个对应字母表里的B,以此类推。只会出现大写字母。加密信息中可能会有空格,空格在解密出来的信息中保留。
如:
2
HPC PJVYMIY
BLMRGJIASOPZEFDCKWYHUNXQTV
FDY GAI BG UKMY
KIMHOTSQYRLCUZPAGWJNBVDXEF


输出:
对于每一组数据,输出一行解密信息。格式如下:
数据组数(从1开始),解密信息;以空格隔开,最后没有空格,换行符结束。

如:
1 ACM CONTEST
2 THE SKY IS BLUE

思路:
明文对应的是标准的ABCDEF...
密文对应的所给定的26个字母

#include<stdio.h>#include<malloc.h>const char f[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";void jiemi(char *m, const char *n);int main(){int n, i;char **p;char **a;scanf("%d", &n);getchar();p = (char **)malloc(sizeof(char *) * n);a = (char **)malloc(sizeof(char *) * n);  for(i = 0; i < n; i++){a[i] = (char *)malloc(sizeof(char) * 1000); gets(a[i]);p[i] = (char *)malloc(sizeof(char) * 26);gets(p[i]);jiemi(a[i], p[i]);}for(i = 0; i < n; i++){printf("%d %s\n", i+1, a[i]);}free(a);free(p);return 0;}void jiemi(char *m, const char *n){int i, j, temp;for(i = 0; m[i] != '\0'; i++){j = 0;while(1){if(m[i] == ' '){break;}if(m[i] == f[j]){temp = (int)(f[j] - 'A');m[i] = n[temp];break;}j++;}}}




0 0