A : 摩斯密码

 
  

题目描述:

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

现在给你一段摩斯密码,请你把它们进行解密

输入

 
  

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

输出

 
  

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

样例输入

5
..
. .
. ..
.  ..
..  .-.. --- ...- .  -.-- --- ..-

样例输出

i
ee
ei
e i
i love you

解题思路:

就是一个模拟题, 考虑好空格的个数,然后将字母和数字代表的摩斯密码存到一个二维数组里

代码:

# include <stdio.h>
# include <string.h>

char a[1001];
int c;
char b[30][10] = {".-", "-...", "-.-.", "-..", ".", "..-.", 
"--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", 
".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", 
"-.--", "--.."};  // 存字符A - Z

char b1[15][10] = {"-----", ".----", "..---", "...--", "....-", 
".....", "-....", "--...", "---..", "----."};     //存数字0 - 9

int main(void)
{
	int t, d, i, j, q, k;
	char a1[10];   // 存要比较的字符串
	scanf("%d", &t);
	getchar();
	while (t --)
	{
		memset(a1, 0, sizeof(a1));  //每次的初始化
		gets(a);
		d = strlen(a);
		c = 0;
		for (i = 0; i < d; i ++)
		{
			if (a[i] != ' ')
			{
				a1[c ++] = a[i];
			}
			else
			{
				if (c == 5)  //数字的密码都是5位的。
				{
					for (j = 0; j <= 10; j ++)
					{
						if (strcmp(a1, b1[j]) == 0)
						{
							q = j;
							break;
						}
					}
					printf("%d", q);
					if (a[i+1] == ' ')   //判断后一位是不是‘ ’, 如果是要输出一个空格
					{
						printf(" ");
						i = i+1;
					}
				}
				else   // 判断字符
				{
					for (j = 0; j <= 26; j ++)
					{
						if (strcmp(a1, b[j]) == 0)
						{
							q = j;
							break;
						}
					}
					printf("%c", q+97);  // 转化为小写的
					if (a[i+1] == ' ')
					{
						printf(" ");
						i = i+1;
					}
				}
				c = 0;
				memset(a1, 0, sizeof(a1));
			}
		}	 
		if (c == 5)  //判断最后一个  和for循环里面的是一样的、
		{
			for (i = 0; i <= 10; i ++)
			{
				if (strcmp(a1, b1[i]) == 0)
				{
					q = i;
					break;
				}
			}
			printf("%d", q);
		}
		else
		{
			for (i = 0; i <= 26; i ++)
			{
				if (strcmp(a1, b[i]) == 0)
				{
					q = i;
					break;
				}
			}
			printf("%c", q+97);
		}
		printf("\n");
	}
	return 0;
}

 
 

猜你喜欢

转载自blog.csdn.net/liu344439833/article/details/80296906