morse.cpp
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
map<char, string> table;
table['A'] = ".-";
table['B'] = "-...";
table['C'] = "-.-.";
table['D'] = "-..";
table['E'] = ".";
table['F'] = "..-.";
table['G'] = "--.";
table['H'] = "....";
table['I'] = "..";
table['J'] = ".---";
table['K'] = "-.-";
table['L'] = ".-..";
table['M'] = "--";
table['N'] = "-.";
table['O'] = "---";
table['P'] = ".--.";
table['Q'] = "--.-";
table['R'] = ".-.";
table['S'] = "...";
table['T'] = "-";
table['U'] = "..-";
table['V'] = "...-";
table['W'] = ".--";
table['X'] = "-..-";
table['Y'] = "-.--";
table['Z'] = "--..";
table['_'] = "..--";
table['.'] = "---.";
table[','] = ".-.-";
table['?'] = "----";
string retezec;
while(getline(cin, retezec)){
string nretezec;
nretezec.resize(retezec.size());
int pos = 0;
int len = retezec.size();
int delka_znaku[len];
for(int i = 0; i < len; i++){
string s = table[retezec.at(i)];
nretezec.insert(pos, s);
delka_znaku[i] = s.size();
pos += s.size();
}
int reverse[len];
for(int i = len - 1, j = 0; i >= 0; j++, i--){
reverse[j] = delka_znaku[i];
}
string result;
pos = 0;
for(int i = 0; i < len; i++){
string part = nretezec.substr(pos, reverse[i]);
map<char, string>::iterator it = table.begin();
for(;it != table.end(); it++){
if(it->second == part){
result.push_back(it->first);
}
}
pos += reverse[i];
}
cout << result << endl;
}
return 0;
}