Description
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.
Input
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".
Output
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main(){
int i,j,k;
char s[500],a[250],c;
while(scanf("%s",a)!=EOF && strlen(a)<6){
//要注意加上getchar();因为读入了字符串了;
getchar();
//因为一开始读入的是Start这个字符串,所以要读入其他密文的话,采用一个一个字符读入,然后如果是换行符的话,那么就跳出循环break;
if(a[0]=='S'){
k=0;
while(c=getchar()){
if('A'<=c&&c<='E') s[k++]=c+21;
else if(c>'E'&&c<='Z') s[k++]=c-5;
else if(c=='\n') break;
else s[k++]=c;
}
}
else {
s[k]='\0'; //别忘了这一步;
puts(s);
}
if(strcmp(a,"ENDOFINPUT")==0) break;
}
}
340



被折叠的 条评论
为什么被折叠?



