A : 摩斯密码
题目描述
题目描述:
摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。为了简单问题,去除所有的标点符号。
现在给你一段摩斯密码,请你把它们进行解密。
输入
含有T(T<=20)组数据,每组数据包含一段摩斯密码(由字符 '.' 和 '-' 以及 空格组成,连续空格个数不超过两个),每段占一行(不超过1000个字符),现在请你对他们进行解密;
输出
输出对应的解密后的结果(所有解密结果如果是英文字母一律输出小写英文字母),保证结果仅包含 数字 空格 字母。
样例输入
复制
5
..
. .
. ..
. ..
.. .-.. --- ...- . -.-- --- ..-
样例输出
复制
i
ee
ei
e i
i love you
题意描述:
根据密码表,输出结果。
解题思路:
根据不同字符进行判断解密。(写的比较水,应该还有更简洁的)
程序代码:
#include<stdio.h>
#include<string.h>
char zimu1(char a)
{
if(a=='.')
return 'e';
if(a=='-')
return 't';
}
char zimu2(char a,char b)
{
if(a=='.'&&b=='-')
return 'a';
if(a=='.'&&b=='.')
return 'i';
if(a=='-'&&b=='-')
return 'm';
if(a=='-'&&b=='.')
return 'n';
}
char zimu3(char a,char b,char c)
{
if(a=='.'&&b=='.'&&c=='-')
return 'u';
if(a=='-'&&b=='.'&&c=='.')
return 'd';
if(a=='-'&&b=='-'&&c=='.')
return 'g';
if(a=='-'&&b=='.'&&c=='-')
return 'k';
if(a=='-'&&b=='-'&&c=='-')
return 'o';
if(a=='.'&&b=='-'&&c=='.')
return 'r';
if(a=='.'&&b=='.'&&c=='.')
return 's';
if(a=='.'&&b=='-'&&c=='-')
return 'w';
}
char zimu4(char a,char b,char c,char d)
{
if(a=='-'&&b=='-'&&c=='.'&&d=='-')
return 'q';
if(a=='-'&&b=='.'&&c=='-'&&d=='-')
return 'y';
if(a=='-'&&b=='.'&&c=='.'&&d=='.')
return 'b';
if(a=='-'&&b=='.'&&c=='-'&&d=='.')
return 'c';
if(a=='.'&&b=='.'&&c=='-'&&d=='.')
return 'f';
if(a=='.'&&b=='.'&&c=='.'&&d=='.')
return 'h';
if(a=='.'&&b=='-'&&c=='-'&&d=='-')
return 'j';
if(a=='.'&&b=='-'&&c=='.'&&d=='.')
return 'l';
if(a=='.'&&b=='-'&&c=='-'&&d=='.')
return 'p';
if(a=='.'&&b=='.'&&c=='.'&&d=='-')
return 'v';
if(a=='-'&&b=='.'&&c=='.'&&d=='-')
return 'x';
if(a=='-'&&b=='-'&&c=='.'&&d=='.')
return 'z';
}
int zimu5(char a,char b,char c,char d,char e)
{
if(a=='-'&&b=='-'&&c=='-'&&d=='-'&&e=='-')
return '0';
if(a=='.'&&b=='-'&&c=='-'&&d=='-'&&e=='-')
return '1';
if(a=='.'&&b=='.'&&c=='-'&&d=='-'&&e=='-')
return '2';
if(a=='.'&&b=='.'&&c=='.'&&d=='-'&&e=='-')
return '3';
if(a=='.'&&b=='.'&&c=='.'&&d=='.'&&e=='-')
return '4';
if(a=='.'&&b=='.'&&c=='.'&&d=='.'&&e=='.')
return '5';
if(a=='-'&&b=='.'&&c=='.'&&d=='.'&&e=='.')
return '6';
if(a=='-'&&b=='-'&&c=='.'&&d=='.'&&e=='.')
return '7';
if(a=='-'&&b=='-'&&c=='-'&&d=='.'&&e=='.')
return '8';
if(a=='-'&&b=='-'&&c=='-'&&d=='-'&&e=='.')
return '9';
}
char a[1100];
int main()
{
int t,i,len;
scanf("%d\n",&t);
while(t--)
{
gets(a);
len=strlen(a);
for(i=0;i<=len;i++)//判断不同情况下的解密结果
{
if((i-1==-1||a[i-1]==' ')&&a[i]!=' '&&a[i]!='\0'&&a[i+1]!=' '&&a[i+1]!='\0'&&(a[i+2]==' '||a[i+2]=='\0'))
printf("%c",zimu2(a[i],a[i+1]));
else if((i-1==-1||a[i-1]==' ')&&a[i]!=' '&&a[i]!='\0'&&(a[i+1]==' '||a[i+1]=='\0'))
printf("%c",zimu1(a[i]));
else if((i-1==-1||a[i-1]==' ')&&a[i]!=' '&&a[i]!='\0'&&a[i+1]!=' '&&a[i+1]!='\0'&&a[i+2]!=' '&&a[i+2]!='\0'&&(a[i+3]==' '||a[i+3]=='\0'))
printf("%c",zimu3(a[i],a[i+1],a[i+2]));
else if((i-1==-1||a[i-1]==' ')&&a[i]!=' '&&a[i]!='\0'&&a[i+1]!=' '&&a[i+1]!='\0'&&a[i+2]!=' '&&a[i+2]!='\0'&&a[i+3]!=' '&&a[i+3]!='\0'&&(a[i+4]==' '||a[i+4]=='\0'))
printf("%c",zimu4(a[i],a[i+1],a[i+2],a[i+3]));
else if((i-1==-1||a[i-1]==' ')&&a[i]!=' '&&a[i]!='\0'&&a[i+1]!=' '&&a[i+1]!='\0'&&a[i+2]!=' '&&a[i+2]!='\0'&&a[i+3]!=' '&&a[i+3]!='\0'&&a[i+4]!=' '&&a[i+4]!='\0'&&(a[i+5]==' '||a[i+5]=='\0'))
printf("%c",zimu5(a[i],a[i+1],a[i+2],a[i+3],a[i+4]));
else if(a[i]==' '&&a[i+1]==' ')
printf(" ");
else
continue;
}
printf("\n");
}
return 0;
}