摩斯电码是一种传送文字讯息的方式,在电报通讯的时代被广泛地使用。它使用两种长短不同的讯号產生而成的序列来表示各个英文字母、数字和标点符号。我们用点( . )来表示短讯号,用划(一)来表示长讯号,在两个讯号间以很短的空白(无讯号的状态)来隔开。英文字母对应的摩斯电码如下:
A .- B -... C -. - . D -.. E . F .. - .
G - - . H .... I .. J . - -- K -.- L . - ..
M -- N -. O - - - P . - -. Q - - .- R . - .
S ... T - U ..- V ...- W . - - X -..-
Y -. - - Z - - ..
在摩斯电码中,我们需要使用很短的空白来分隔两个讯号,用稍长的空白来分隔两个字母,用更长的空白来分隔两个英文单字。但是这样有些不方便,如果收讯号的人没办法精準的判断空白的长短,就会搞混 E 工和 S ,或是 AN 和 P 。这个间题的原因是 S 的电码开头和 E 的电码重复, P 的电码开头和 A 的电码重复。為了解决这个间题,我们修改摩斯电码的编码规则,让每一个字母的电码都不会和其他字母的电码开头重复,我们称為「字首差异电码」。使用字首差异电码,我们不需要空白就可以分辨两个字母。这个电码与英文字母的对应如下:
A - - -. B - - .... C . - ..- D - - - - -
E . - - F .. - .- G - - .. - - H -...
I -. - - J .. - .. - . - - K .. - .. - - L - - - - .
M .. - - - N -. - . O - - .- P - - ...-
Q .. - .. - ..- R . - .- S -..- T ...
U . - ... V .. - ... W .. - -. X .. - .. - . - .
Y - - .. - . Z .. - .. - ...
现在,给你一段字首差异电码,请你解读这段电码代表的英文字句。
输入说明 :
输入的第一行有一个正整数 T,代表测试资料的组数 (1 ≤ T ≤ 500)。接下来每一行有一个以点 ('.')、划 ('-') 和空白 (' ') 组成的字串,代表一组测试资料。点和划就如题目所说,分别代表短讯号和长讯号。我们忽略讯号之间的空白,而用空白字元代表两个单字的分隔。题目保证每一行的长度不超过 200 ,而且都能正确解码,没有多餘的讯号。一个字母的电码不会被空白字元切开,测试资料中也不会有连续的空白字元。
输出说明 :
对每一笔测资输出一行,即这段字首差异电码代表的英文字句。电码对应的英文字母以大写表示,两个英文单字间以一个空白字元隔开。
范例输入 :
4
...-...-.---..- -.---..- ---.-.-.
.-----.-..---..-.
--...-.-.---.---....----..--..---
--..-.--.-.-... .-..----.-.-. -------.- -.--...
范例输出 :
THIS IS AN
EASY
PROBLEM
YOU CAN DO IT

code
#include <iostream>
using namespace std;
char s[26][15], ss[205], sc[15], ans[205];
int main(){
strcat(s[0], "---.");
strcat(s[1], "--
.");
strcat(s[2], ".-..-");
strcat(s[3], "-----");
strcat(s[4], ".--");
strcat(s[5], "..-.-");
strcat(s[6], "--..--");
strcat(s[7], "-
");
strcat(s[8], "-.--");
strcat(s[9], "..-..-.--");
strcat(s[10], "..-..--");
strcat(s[11], "----.");
strcat(s[12], "..---");
strcat(s[13], "-.-.");
strcat(s[14], "--.-");
strcat(s[15], "--
-");
strcat(s[16], "..-..-..-");
strcat(s[17], ".-.-");
strcat(s[18], "-..-");
strcat(s[19], "
");
strcat(s[20], ".-
");
strcat(s[21], "..-
");
strcat(s[22], "..--.");
strcat(s[23], "..-..-.-.");
strcat(s[24], "--..-.");
strcat(s[25], "..-..-
");
int i, j, t, ci, l, ai;
scanf("%d\n", &t);
while( t-- )
{
ai=0;
ci=0;
gets(ss);
l=strlen(ss);
for( i=0; i<l; i++ )
{
if( ss[i]==' ' )
{
ans[ai]=' ';
ai++;
for( j=0; j<ci; j++ )
sc[j]='\0';
ci=0;
continue;
}
sc[ci]=ss[i];
sc[ci+1]='\0';
for( j=0; j<26; j++ )
if( strcmp(s[j], sc)==0 )
break;
ci++;
if( j<26 )
{
ans[ai]=j+65;
ai++;
for( j=0; j<ci; j++ )
sc[j]='\0';
ci=0;
}
}
ans[ai]='\0';
puts(ans);
}
return 0;