/*凯撒大帝创建了第一套密码,对原文的每个字母,用这个字母后的第五个字母来替换;
输入:
输入有多达100个测试用例组成,每个测试用例的组成:
一个测试用例有三部分组成:
1.起始一行——一行,“START".
2.密码消息——一行,由100~200个字母组成,包含100和200,表示由凯撒发过来的消息;
3.结束——一行,”END“。
在最后一个测试用例后给出一行,”ENDOFINPUT".
输出:
对于每个测试用例,输出一行,给出凯撒的原文信息。
*/
# include <stdio.h>
# include <limits.h>
# include <string.h>
# define MAXNUM 100
# define LEN 26
const char ciper[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
const char plain[]={'V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U'};
char input1[MAXNUM];
char str[100][1000];
int main()
{
int len;
int i,j,tag;
int num;
memset(input1,0,sizeof(input1));
memset(str,0,sizeof(str));
scanf("%s",input1);
while(strcmp(input1,"ENDOFINPUT")!=0)
{
if(strcmp(input1,"START")==0)
{
memset(input1,0,sizeof(input1));
memset(str,0,sizeof(str));
num=0;
gets(input1);
strcpy(str[num++],input1);
}
else if(strcmp(input1,"END")==0)
{
for(int k=0;k<num-1;k++) //end被复制到num-1中;
{
strcpy(input1,str[k]);
len=strlen(input1);
for(i=0;i<len;i++)
{
tag=1;
for(j=0;j<LEN&&tag;j++)
{
if(ciper[j]==input1[i])
{
input1[i]=plain[j];
tag=0;
}
}
}
printf("%s\n",input1);
}
printf("\n");// 可以省掉具体
}
else
{
gets(input1);
strcpy(str[num++],input1);
}
}
return 0;
}
凯撒密码解密
最新推荐文章于 2020-11-22 04:39:05 发布