题目

源地址:

http://poj.org/problem?id=1051

理解

简单的字符串转换,要有耐心= =,debug出翔。

代码

#include <stdio.h>
#include <string.h>
#define MAX 102

char str[MAX];
char code[4*MAX];
int code_len[MAX];
int cnt;
int read_cnt;
int len;

const char * dic[]={".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..","..--","---.",".-.-","----"};

int len_of_code(char ch)
{
	if(ch-'A'<26&&ch-'A'>=0) return strlen(dic[ch-'A']);
	else return 4;
}

void addcode(char ch)
{
	int _i;
	char cache[5];
	if(ch-'A'>=0&&ch-'A'<26) strcpy(cache,dic[ch-'A']);
	else if(ch=='_') strcpy(cache,dic[26]);
	else if(ch=='.') strcpy(cache,dic[27]);
	else if(ch==',') strcpy(cache,dic[28]);
	else if(ch=='?') strcpy(cache,dic[29]);
	for(_i=0;cache[_i]!='\0';_i++)
	{
		code[cnt++]=cache[_i];
	}
}

void readcode()
{
	char cache[5];
	int _cnt;
	int _i,_j;
	for(_i=len-1;_i>=0;_i--)
	{
		_cnt=0;
		for(_j=0;_j<code_len[_i];_j++)
			cache[_cnt++]=code[read_cnt++];
		cache[_cnt]='\0';
		for(_j=0;_j<30;_j++)
			if(strcmp(cache,dic[_j])==0)
			{
				if(_j<26) printf("%c",_j+'A');
				else if(_j==26) printf("_");
				else if(_j==27) printf(".");
				else if(_j==28) printf(",");
				else printf("?");
			}
	}
}

int main(int argc, char const *argv[])
{
	int n;
	int i,j;

	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		cnt=0;read_cnt=0;
		scanf("%s",str);
		len=strlen(str);
		for(j=0;j<len;j++)
		{
			code_len[j]=len_of_code(str[j]);
			addcode(str[j]);
		}
		printf("%d: ",i+1);
		readcode();
		printf("\n");
	}
	return 0;
}

更新日志

  • 2014年08月12日 已AC。