您的位置:首页 > 其它

我需要一块二向箔,清理用(模拟)

2019-03-17 17:27 459 查看

题目描述

摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。为了简单问题,去除所有的标点符号。 现在给你一段摩斯密码,请你把它们进行解密。


 

输入

含有T(T<=20)组数据,每组数据包含一段摩斯密码(由字符 '.' 和 '-' 以及 空格组成连续空格个数不超过两个),每段占一行(不超过1000个字符),现在请你对他们进行解密;

输出

输出对应的解密后的结果(所有解密结果如果是英文字母一律输出小写英文字母),保证结果仅包含 数字 空格 字母。

例:

输入:

5

..

. .

. ..

.  ..

.. .-.. --- ...- . -.-- --- ..-

 

输出:

i

ee

ei

e i

i love you

 

代码:

[code]#include<stdio.h>
#include<string.h>

typedef struct data{
char ch[10];
char letter;
}data;//将不明字符和它所代表的字母或数字联系起来

data s[40];//共有26个字母和10个数字

int main()
{

strcpy(s[1].ch ,".-");s[1].letter ='a';
strcpy(s[2].ch ,"-...");s[2].letter ='b';
strcpy(s[3].ch ,"-.-.");s[3].letter ='c';
strcpy(s[4].ch ,"-..");s[4].letter ='d';
strcpy(s[5].ch ,".");s[5].letter ='e';
strcpy(s[6].ch ,"..-.");s[6].letter ='f';
strcpy(s[7].ch ,"--.");s[7].letter ='g';
strcpy(s[8].ch ,"....");s[8].letter ='h';
strcpy(s[9].ch ,"..");s[9].letter ='i';
strcpy(s[10].ch ,".---");s[10].letter ='j';
strcpy(s[11].ch ,"-.-");s[11].letter ='k';
strcpy(s[12].ch ,".-..");s[12].letter ='l';
strcpy(s[13].ch ,"--");s[13].letter ='m';
strcpy(s[14].ch ,"-.");s[14].letter ='n';
strcpy(s[15].ch ,"---");s[15].letter ='o';
strcpy(s[16].ch ,".--.");s[16].letter ='p';
strcpy(s[17].ch ,"--.-");s[17].letter ='q';
strcpy(s[18].ch ,".-.");s[18].letter ='r';
strcpy(s[19].ch ,"...");s[19].letter ='s';
strcpy(s[20].ch ,"-");s[20].letter ='t';
strcpy(s[21].ch ,"..-");s[21].letter ='u';
strcpy(s[22].ch ,"...-");s[22].letter ='v';
strcpy(s[23].ch ,".--");s[23].letter ='w';
strcpy(s[24].ch ,"-..-");s[24].letter ='x';
strcpy(s[25].ch ,"-.--");s[25].letter ='y';
strcpy(s[26].ch ,"--..");s[26].letter ='z';
strcpy(s[27].ch ,"-----");s[27].letter ='0';
strcpy(s[28].ch ,".----");s[28].letter ='1';
strcpy(s[29].ch ,"..---");s[29].letter ='2';
strcpy(s[30].ch ,"...--");s[30].letter ='3';
strcpy(s[31].ch ,"....-");s[31].letter ='4';
strcpy(s[32].ch ,".....");s[32].letter ='5';
strcpy(s[33].ch ,"-....");s[33].letter ='6';
strcpy(s[34].ch ,"--...");s[34].letter ='7';
strcpy(s[35].ch ,"---..");s[35].letter ='8';
strcpy(s[36].ch ,"----.");s[36].letter ='9';

int t;
scanf("%d",&t);//如果数万数字后需输入字符,要加上getchar
getchar();
while(t--)
{
char str[1006],str1[1006];
gets(str);
memset(str1,0,sizeof(str1));//初始化
int x=-1;
int begin=0,end=0;//下标
char cc[10];
int l=strlen(str);
for(int i=0;i<l;i++)
{
if(i==0)begin=0;
if(str[i]!=' ')end=i;
if(str[i]==' '||end==l-1)
{
if(str[i]==' ')end=i-1;
memset(cc,0,sizeof(cc));
strncpy(cc,str+begin,end-begin+1);//截取字符串存入新的字符串中
int j;
for(j=1;j<=36;j++)
{
if(strcmp(s[j].ch ,cc)==0)
{
str1[++x]=s[j].letter ;
break;
}
}
begin=end+2;
memset(cc,0,sizeof(cc));//初始化为0
if(str[i+1]== ' ')
{
str1[++x]=' ';
i=i+1;
begin=begin+1;
}
}

}
printf("%s",str1);

if(t!=0)
{
printf("\n");
}

}
return 0;
}
//对你

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: