#include<iostream>
#include<string>
#include<map>
#include<list>
#include<ios>
#include<algorithm>
#include<iterator>
std::map<std::string,std::string>* getEncodingMap() {
std::map<std::string, std::string> *encodeMap = new std::map<std::string, std::string>();
encodeMap->insert(std::pair<std::string,std::string>("A" , ".-"));
encodeMap->insert(std::pair<std::string,std::string>("B" , "-..."));
encodeMap->insert(std::pair<std::string,std::string>("C" , "-.-."));
encodeMap->insert(std::pair<std::string,std::string>("D" , "-.."));
encodeMap->insert(std::pair<std::string,std::string>("E" , "."));
encodeMap->insert(std::pair<std::string,std::string>("F" , "..-."));
encodeMap->insert(std::pair<std::string,std::string>("G" , "--."));
encodeMap->insert(std::pair<std::string,std::string>("H" , "...."));
encodeMap->insert(std::pair<std::string,std::string>("I" , ".."));
encodeMap->insert(std::pair<std::string,std::string>("J" , ".---"));
encodeMap->insert(std::pair<std::string,std::string>("K" , "-.-"));
encodeMap->insert(std::pair<std::string,std::string>("L" , ".-.."));
encodeMap->insert(std::pair<std::string,std::string>("M" , "--"));
encodeMap->insert(std::pair<std::string,std::string>("N" , "-."));
encodeMap->insert(std::pair<std::string,std::string>("O" , "---"));
encodeMap->insert(std::pair<std::string,std::string>("P" , ".--."));
encodeMap->insert(std::pair<std::string,std::string>("Q" , "--.-"));
encodeMap->insert(std::pair<std::string,std::string>("R" , ".-."));
encodeMap->insert(std::pair<std::string,std::string>("S" , "..."));
encodeMap->insert(std::pair<std::string,std::string>("T" , "-"));
encodeMap->insert(std::pair<std::string,std::string>("U" , "..-"));
encodeMap->insert(std::pair<std::string,std::string>("V" , "...-"));
encodeMap->insert(std::pair<std::string,std::string>("W" , ".--"));
encodeMap->insert(std::pair<std::string,std::string>("X" , "-..-"));
encodeMap->insert(std::pair<std::string,std::string>("Y" , "-.--"));
encodeMap->insert(std::pair<std::string,std::string>("Z" , "--.."));
encodeMap->insert(std::pair<std::string,std::string>("Ä" , ".-.-"));
encodeMap->insert(std::pair<std::string,std::string>("Ö" , "---."));
encodeMap->insert(std::pair<std::string,std::string>("Ü" , "..--"));
encodeMap->insert(std::pair<std::string,std::string>("ß" , "...--.."));
encodeMap->insert(std::pair<std::string,std::string>("." , ".-.-."));
encodeMap->insert(std::pair<std::string,std::string>(" " , "/"));
encodeMap->insert(std::pair<std::string,std::string>("," , "--..--"));
encodeMap->insert(std::pair<std::string,std::string>("(" , "-.-.-"));
encodeMap->insert(std::pair<std::string,std::string>(")" , "-.--.-"));
encodeMap->insert(std::pair<std::string,std::string>("=" , "-...-"));
encodeMap->insert(std::pair<std::string,std::string>("1" , ".----"));
encodeMap->insert(std::pair<std::string,std::string>("2" , "..---"));
encodeMap->insert(std::pair<std::string,std::string>("3" , "...--"));
encodeMap->insert(std::pair<std::string,std::string>("4" , "....-"));
encodeMap->insert(std::pair<std::string,std::string>("5" , "....."));
encodeMap->insert(std::pair<std::string,std::string>("6" , "-...."));
encodeMap->insert(std::pair<std::string,std::string>("7" , "--..."));
encodeMap->insert(std::pair<std::string,std::string>("8" , "---.."));
encodeMap->insert(std::pair<std::string,std::string>("9" , "----."));
encodeMap->insert(std::pair<std::string,std::string>("0" , "-----"));
return encodeMap;
}
int main(int argc, char** argv) {
std::map<std::string, std::string>* codeMap = getEncodingMap();
std::string msg;
std::list<std::string> encodedMsg;
std::list<std::string> decodedMsg;
std::map<std::string, std::string>::iterator it;
std::cout<<"Type Message"<<std::endl;
std::getline(std::cin>>std::uppercase,msg);
std::transform(msg.begin(), msg.end(),msg.begin(), toupper);
for(std::string::iterator msgIt = msg.begin(); msgIt != msg.end(); msgIt++) {
it = codeMap->find(std::string(1, *msgIt));
if(it == codeMap->end()) {
std::cout<<"not found"<<std::endl;
} else {
encodedMsg.push_back(it->second);
}
}
for(std::list<std::string>::iterator encIt = encodedMsg.begin(); encIt != encodedMsg.end(); encIt++) {
for(std::map<std::string, std::string>::iterator codeMapIt = codeMap->begin(); codeMapIt != codeMap->end(); codeMapIt++) {
if(codeMapIt->second == *encIt) {
it = codeMapIt;
break;
} else {
it = codeMap->end();
}
}
if(it == codeMap->end()) {
std::cout<<"not found"<<std::endl;
} else {
std::cout<<it->first;
}
}
return 0;
}