You are a sub captain of Caesar's army. It is your job to decipher the messages sent by Caesar and provide to your general. The code is simple. For each letter in a plaintext message, you shift it five places to the right to create the secure message (i.e., if the letter is 'A', the cipher text would be 'F'). Since you are creating plain text out of Caesar's messages, you will do the opposite:
Cipher text
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
Plain text
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
Only letters are shifted in this cipher. Any non-alphabetical character should remain the same, and all alphabetical characters will be upper case.
A single data set has 3 components:
Start line - A single line, "START"
Cipher message - A single line containing from one to two hundred characters, inclusive, comprising a single message from Caesar
End line - A single line, "END"
Following the final data set will be a single line, "ENDOFINPUT".
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main()
{
char cipher[3][200]; //用来存储每一个数据集
int j,k;
while(1)
{
for(j=0;j<3;j++)
{
gets(cipher[j]); //将每行的信息读入到数组中
if(j==1)
{
k=0;
while(cipher[1][k]!='\0') //破译密文
{
if(cipher[1][k]<'F'&&isupper(cipher[1][k]))
cipher[1][k]+=21;
else if(isupper(cipher[1][k]))
cipher[1][k]-=5;
k++;
}
}
}
if(strcmp(cipher[0],"ENDOFINPUT")!=0) puts(cipher[1]); //输出结果
if(strcmp(cipher[0],"ENDOFINPUT")==0) break; //输入结束的标志
}
return 0;
}