C語言簡單解密

輸入:
第一行包含一個整數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++;
		}
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章