趣味題:愷撒Caesar密碼(c++實現) -开发者知识库

趣味題:愷撒Caesar密碼(c++實現) -开发者知识库,第1张

描述:Julius Caesar 生活在充滿危險和陰謀的年代。為了生存,他首次發明了class="superseo">密碼,用於軍隊的消息傳遞。假設你是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 }

 



最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复