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

题目描述

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


 

输入

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

输出

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

例:

输入:

5

..

. .

. ..

.  ..

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

 

输出:

i

ee

ei

e i

i love you

 

代码:

#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; 	
}		
//对你 

 

猜你喜欢

转载自blog.csdn.net/qq_43981607/article/details/88622481
0条评论
添加一条新回复