やるだけだけどちょっと癖があるなあと思ったのでメモ。
問題 → シーザー暗号 | Aizu Online Judge
zをaに置き換えるとか、zの先に行かないように戻ってくる処理が必要なので3項演算子で書いた。本当にそれだけなんだけど書き方忘れたら困るのでソースコード貼っておく。
#include <bits/stdc++.h> #define rep(i,a,n) for(int i=a;i<n;i++) using namespace std; int main() { string s; while(getline(cin,s)) { string t; rep(j,0,26) { t.clear(); rep(i,0,s.length()) { if('a' <= s[i] && s[i] <= 'z') t += (s[i] + j > 'z') ? (s[i] + j - 26) : (s[i] + j); else t += s[i]; } if(t.find("this") != string::npos) break; else if(t.find("the") != string::npos) break; else if(t.find("that") != string::npos) break; } cout << t << endl; } return 0; }
AOJ埋めの進捗ダメです。