描述:Julius Caesar 生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是Caesar 军团中的一名军官,需要把Caesar 发送的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。 密码字母: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 原文字母: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
输入:最多不超过100个数据集组成。每个数据集由3部分组成:起始行:START 密码消息:由1到200个字符组成一行,表示Caesar发出的一条消息结束行:END 在最后一个数据集之后,是另一行:ENDOFINPUT
输出:每个数据集对应一行,是Caesar 的原始消息。
input:
START
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
END
START
N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
END
START
IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
END
ENDOFINPUT
ouput:
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE
分析:题目比较简单,需要注意的是输入函数的使用,密码消息中含空格,故不能用cin输入,所以使用getline(cin.str)输入,特别第一个start的字符串也要使用getline()输入,否则密码征文为空白,我觉得应该是输入start用回车换行后回车符还在缓冲区,等到用getline()输入是读到了回车结束输入,这样密码消息为空白。
getline(),只以回车作为结束符
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 void change(string& a) 6 { 7 for (int i = 0; i < a.size(); i++) 8 { 9 if (a[i] >= 'A'&&a[i] <= 'U') 10 a[i] += 5; 11 else if (a[i] >= 'V'&&a[i] <= 'Z') 12 a[i] = 'A' + a[i] - 'V'; 13 } 14 } 15 16 int main() 17 { 18 string start, message, end; 19 while ((getline(cin, start)) && (start.compare("ENDOFINPUT"))) 20 { 21 getline(cin,message); 22 getline(cin, end); 23 change(message); 24 cout << message << endl; 25 } 26 system("pause"); 27 return 0; 28 }