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;
}
 

京公网安备 11010502036488号