1. 程式人生 > >EOJ 3000 ROT13加密和解密

EOJ 3000 ROT13加密和解密

i++ 出現 put inf OS 小寫字母 註意 順序 tput

應用 ROT13 到一段文字上僅僅只需要檢查字母順序並取代它在 13 位之後的對應字母,有需要超過時則重新繞回 26 英文字母開頭即可。A 換成 N、B 換成 O、依此類推到 M 換成 Z,然後串行反轉:N 換成 A、O 換成 B、最後 Z 換成 M (如圖所示)。只有這些出現在英文字母裏的字符受影響;數字、符號、空白字符以及所有其他字符都不變。替換後的字母大小寫保持不變。

技術分享圖片

Input

第 1 行:一個整數 T (1≤T≤10) 為問題數。

接下來共 T 行。每行為長度不超過 1000 個字符的一段文字。內含大小寫字母、空格、數字和各種符號等。
Output

對於每個問題,輸出一行問題的編號(0 開始編號,格式:case #0: 等)。

然後對應每個問題在一行中輸出經過 ROT13 加密後的一段文字。


定義一個const數組,便於直接+13回轉,省去判斷是否需要繞回

const string rot="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";

核心部分

1         string a;
2         getline(cin,a);
3         for(int i=0;i<a.size();i++)
4 if(isalpha(a[i])) 5 a[i]=a[i]>=a
?tolower(rot[a[i]-a+13]):rot[a[i]-A+13];
6
printf("case #%d:\n",m); 7 cout << a << endl;

註意原輸入的大小寫不可改變。

EOJ 3000 ROT13加密和解密