fs.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char Morse[300][10] =
{
".-",
"-...",
"-.-.",
"-..",
".",
"..-.",
"--.",
"....",
"..",
".---",
"-.-",
".-..",
"--",
"-.",
"---",
".--.",
"--.-",
".-.",
"...",
"-",
"..-",
"...-",
".--",
"-..-",
"-.--",
"--..",
"..--",
".-.-",
"---.",
"----"
};
int CharToIndex[300];
char IndexToChar[40] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_,.?";
char String[2000];
int Length[2000];
char Code[10000];
char Buffer[100];
void CharToMorse(char c, char* Buffer, int& Length)
{
int l;
for(l = 0; Morse[CharToIndex[(int) c]][l]; l++)
{
Buffer[l] = Morse[CharToIndex[(int) c]][l];
}
Length = l;
Buffer[l] = '\0';
}
char MorseToChar(char* Code, int Length)
{
char buf[10] = "";
for(int i = 0; i < Length; i++)
{
buf[i] = Code[i];
}
buf[Length] = '\0';
for(int i = 0; 1; i++)
{
if(!(strcmp(Morse[i], buf)))
{
return IndexToChar[i];
}
}
}
int main()
{
for(int i = 0; i < 30; i++)
{
CharToIndex[(int) IndexToChar[i]] = i;
}
/*for(int i = 0; i < 30; i++)
{
printf("%c is %s\n", IndexToChar[i], Morse[i]);
}*/
while(fgets(String, 2000, stdin))
{
/*if(String[0] == '@')
{
return 0;
}*/
int i, l = 0, total = 0;
for(i = 0; String[i] != '\n'; i++)
{
CharToMorse(String[i], Buffer, Length[i]);
for(int j = 0; Buffer[j]; j++)
{
Code[l++] = Buffer[j];
}
}
Code[l] = '\0';
//puts(Code);
total = i;
l = 0;
for(i = total - 1; i >= 0; i--)
{
putchar(MorseToChar(Code + l, Length[i]));
l += Length[i];
}
putchar('\n');
}
return 0;
}