#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <ctype.h>
using namespace std;
struct obj{
char c;
int freq;
obj(){
};
bool operator<(const obj& obj2) const
{
return freq > obj2.freq;
}
};
int n='z'-'a'+1;
string decryptMessage(string message, string freqLang)
{
obj freq[n];
map<char,char> mymap;
for(int i=0;i<n;i++)
{
freq[i].c='a'+i;
freq[i].freq=0;
}
for(int i=0;i<message.size();i++)
{
if(message[i] == '\n')
cout << "enter:"<< i << endl;
if('a'<=message[i] && message[i]<='z')
{
int index= message[i]-'a';
freq[index].c=message[i];
freq[index].freq++;
}
else if('A'<=message[i] && message[i]<='Z')
{
int index= message[i]-'A';
freq[index].c= tolower(message[i]); //convert to lowercase
freq[index].freq++;
}
}
for(int i=0;i<n;i++)
cout<< freq[i].c + " ";
cout << endl;
for(int i=0;i<freqLang.size();i++)
mymap[freq[i].c]=freqLang[i];
for(int i=0;i<message.size();i++)
{
if('a'<=message[i] && message[i]<='z')
message[i]= tolower(mymap.find(message[i])->second);
else if('A'<=message[i] && message[i]<='Z')
message[i]= mymap.find(message[i]+32)->second;
}
return message;
}
int main() {
string message = "Bgc-bfufb tegaedppqna ql aggv zge xof tegaedppfe'l lgjb.\n"
"Xof adpf vflqanfe logjbvn'x hf pdwqna d cgebv qn coqro xof tbdkfe\n"
"ql mjlx d lpdbb tdex. Xof tbdkfe QL XOF HGLL; qx'l kgje vjxk xg\n"
"fnxfexdqn oqp ge ofe.\n"
"Zgrjl ql d pdxxfe gz vfrqvqna codx xoqnal kgj def ngx agqna xg vg.\n"
"Xof rglx gz dvvqna d zfdxjef qln'x mjlx xof xqpf qx xdwfl xg rgvf\n"
"qx. Xof rglx dblg qnrbjvfl xof dvvqxqgn gz dn ghlxdrbf xg zjxjef\n"
"fstdnlqgn. Xof xeqrw ql xg tqrw xof zfdxjefl xodx vgn'x zqaox fdro\n"
"gxofe. - Mgon Rdepdrw.\n"
"(ccc.adpdljxed.rgp/uqfc/nfcl/234346?utkjpvbjr)\n"
"(ccc.hedqnkijgxf.rgp/ijgxfl/djxogel/m/mgon_rdepdrw.oxpb)";
//cout << message << endl << endl;
string t= "h\n"
"ola";
cout << t[0] <<" "<<t[1] <<t[2]<<endl;
cout << (int) t[1];
string freqLang= "TEOAISRHNUCMDLGWFPYKJBVQX";
string result= decryptMessage(message,freqLang);
cout <<result;
return 0;
}