読者です 読者をやめる 読者になる 読者になる

hogecoder

つたじろう(Tsuta_J) 競技プログラミングの記録

AOJ 0017: Caesar Cipher

AOJ 文字列

やるだけだけどちょっと癖があるなあと思ったのでメモ。

問題 → シーザー暗号 | 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埋めの進捗ダメです。