EOJ 3000 ROT13加密和解密
阿新 • • 發佈:2018-03-17
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加密和解密