UVa 554 Caesar Cypher Solution

#include <iostream>
#include <set>
#include <string>
#include <sstream>
using namespace std;
int mx=0;
string ans;
set<string> dict;
void check(string &s){
    string t;
    int i=0,tx=0;
    while(i<s.size()){
        if(s[i]==' '){
            if(dict.find(t)!=dict.end())
                tx++;
            t="";
        }
        else
            t+=s[i];
        i++;
    }
    if(tx>mx)
        mx=tx,ans=s;
}
int main(){
    string s;
    while(cin>>s&&s[0]!='#'){
        dict.insert(s);
    }
    ws(cin);
    getline(cin,s);
        for(int j=0;j<=27;j++){
            for(int i=0;i<s.size();i++){
                if(s[i]==' ')
                    s[i]='A';
                else if(s[i]=='Z')
                    s[i]=' ';
                else
                    s[i]=int(s[i])+1;
            }
            check(s);
        }
        string fans,tmp;
        stringstream sans(ans);
        while(sans>>tmp){
            if(fans.size()+tmp.size()>60){
                cout<<fans<<endl;
                fans=tmp;
            }
            else{
                if(fans.size()!=0)
                    fans+=' ';
                fans+=tmp;
            }
        }
        cout<<fans<<endl;
}

Comments