趣味題:愷撒Caesar密碼(c++實現)


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

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM