C程序-蓝桥-摩尔斯电码

问题描述

  摩尔斯电码破译。类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文。请不要使用"zylib.h",只能使用标准库函数。用' * '表示' . ',中间空格用' | '表示,只转化字符表。

  摩尔斯码定义见:http://baike.baidu.com/view/84585.htm?fromId=253988。

提示

  清橙进行评测时,输入是以EOF结尾的,而不是换行符。(EOF不是一个字符,“以EOF结尾”是一种通俗但不严谨的说法。)因此可以通过以下方式之一获取输入:

  1. 一次读入整行字符串,再进行后续解析。

  2. 使用getchar或scanf一次读入一个字符,通过它们的返回值判断输入结束。

样例输出

思路:先用二维数组存储摩尔斯电码,再将接收到的电码与之比较,用ACSII码处理更方便

 

 

编译器上没有什么问题,但是测试不通过,不知道为什么,也许和循环输入有关,EOF

#include
#include
#include
int main( ) 
{
    char ch[26][5];
    strcpy(ch[0],"*-");
    strcpy(ch[1],"-***");
    strcpy(ch[2],"-*-*");
    strcpy(ch[3],"-**");
    strcpy(ch[4],"*");
    strcpy(ch[5],"**-*");
    strcpy(ch[6],"--*");
    strcpy(ch[7],"****");
    strcpy(ch[8],"**");
    strcpy(ch[9],"*---");
    strcpy(ch[10],"-*-");
    strcpy(ch[11],"*-**");
    strcpy(ch[12],"--");
    strcpy(ch[13],"-*");
    strcpy(ch[14],"---");
    strcpy(ch[15],"*--*");
    strcpy(ch[16],"--*-");
    strcpy(ch[17],"*-*");
    strcpy(ch[18],"***");
    strcpy(ch[19],"-");
    strcpy(ch[20],"**-");
    strcpy(ch[21],"***-");
    strcpy(ch[22],"*--");
    strcpy(ch[23],"-**-");
    strcpy(ch[24],"-*--");
    strcpy(ch[25],"--**");
    
    int i=0;
    char c;
    char str[5];
    
    while(scanf("%c",&c)!=EOF)
    {
        if(c=='|'||c=='\n')
        {
            str[i]='\0';
            for(int j=0;j<26;j++)
            {
                if(strlen(str)==strlen(ch[j]))
                if(!strncmp(str,ch[j],strlen(ch[j])))
                {
                    printf("%c",j+'a');
                    break;
                }
            }
            i=0;
            continue;
        }
        str[i++]=c;
        
    }
    
    return 0;
}

 

 

测试通过

#include 
#include 
#include 


int main( ) 
{
	//将摩尔斯电码存入二维数组 
	char ch[26][5];
	strcpy(ch[0],"*-");
	strcpy(ch[1],"-***");
	strcpy(ch[2],"-*-*");
	strcpy(ch[3],"-**");
	strcpy(ch[4],"*");
	strcpy(ch[5],"**-*");
	strcpy(ch[6],"--*");
	strcpy(ch[7],"****");
	strcpy(ch[8],"**");
	strcpy(ch[9],"*---");
	strcpy(ch[10],"-*-");
	strcpy(ch[11],"*-**");
	strcpy(ch[12],"--");
	strcpy(ch[13],"-*");
	strcpy(ch[14],"---");
	strcpy(ch[15],"*--*");
	strcpy(ch[16],"--*-");
	strcpy(ch[17],"*-*");
	strcpy(ch[18],"***");
	strcpy(ch[19],"-");
	strcpy(ch[20],"**-");
	strcpy(ch[21],"***-");
	strcpy(ch[22],"*--");
	strcpy(ch[23],"-**-");
	strcpy(ch[24],"-*--");
	strcpy(ch[25],"--**");
	
	int I,j,k=0;
	char str[1000];
	char code[5];
	scanf("%s",str);//输入摩尔斯电码 
	for(i=0;i<=strlen(str);i++)//遍历str,长度为 strlen(str)
	{
		code[k++]=str[i];//单个码单独处理 
		if(str[i]=='|'||str[i]=='\0')
		{
			code[k-1]='\0';//'\0'字符串结束标志,k-1表示覆盖掉'|' 
			for(j=0;j<26;j++) 
			{
				if(strlen(code)==strlen(ch[j]))//码长度相等 
				{
					if(!strncmp(code,ch[j],strlen(ch[j])))//码字符相同 ,strncmp()是字符串比较函数 
					{
						printf("%c",j+'a');//ASCII码,字符'a'加一个整数,则偏移为对应字符 
						break;//结束当层循环 
					}
				}

			}
			k=0;
		}
		
	}
	
	return 0;
}

 

你可能感兴趣的:(C/C++程序,蓝桥)