描述: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 }