2021-01-15

【阿杰程序4】Morse密码翻译
原题目名字:P,MTHBGWB
题目给人都看傻了,网上搜题解的时候看见了这个神码。
可惜题解是图片形式,搜不到而且很冷门,
但是结构体用的真的是很精妙。
当时印象非常深刻,想着就算没学过结构体也要硬着头皮仿一个。
比较神奇的是出了一个bug:
网页复制字母对应morse码,鼠标拖长过了代码框,结果把代码框外面的制表符复制来了(复制来的制表符在vs里不显示!这意味着干看是没有bug的!只能通过运行模拟过程debug)。
因为这个卡了两天,最后硬是输出过程中代码转换的部分,发现多处一堆空格(黑人问号),最后锁定了一个字母的代码有错,但神的是对着代码表查不出错误(制表符不显示,永远看不出bug,我早就怀疑代码表可能有错,两天时间我检查了一万遍,和题解对了一万遍),我就把那个字母代码手打了一遍结果过了!?
怀着狐疑把代码cv到百度搜索框才发现了这个看不出来的bug,当时真的又气又笑。
从此debug能力大大提升。

//Sample Input
//5
//AKADTOF_IBOETATUK_IJN
//PUEL
//QEWOISE.EIVCAEFNRXTBELYTGD.
//?EJHUT.TSMYGW?EJHOT
//DSU.XFNCJEVE.OE_UJDXNO_YHU?VIDWDHPDJIKXZT?E

//Sample Output
//1: ACM_GREATER_NY_REGION
//2: PERL
//3: QUOTH_THE_RAVEN,_NEVERMORE.
//4: TO_BE_OR_NOT_TO_BE?
//5: THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG

#include<iostream>
#include<string>
using namespace std;
struct type
{
	string str;
	char c;
	int length;
};
type letter[30]={{".-",'A',2},{"-...",'B',4},{"-.-.",'C',4},{"-..",'D',3},{".",'E',1},{"..-.",'F',4},
{"--.",'G',3},{"....",'H',4},{"..",'I',2},{".---",'J',4},{"-.-",'K',3},{".-..",'L',4},{"--",'M',2},
{"-.",'N',2},{"---",'O',3},{".--.",'P',4},{"--.-",'Q',4},{".-.",'R',3},{"...",'S',3},{"-",'T',1},
{"..-",'U',3},{"...-",'V',4},{".--",'W',3},{"-..-",'X',4},{"-.--",'Y',4},{"--..",'Z',4},
{"..--",'_',4},{".-.-",',',4},{"---.",'.',4},{"----",'?',4}};
int main()
{
	int n,count=0,num[100];
	cin>>n;
	while(n--)                                //n行代码。
	{
		string mima,code,new_code;
		cin>>code;                            //输入代码code。
		for(unsigned i=0;i<code.length();i++)          //代码转换,大写字母--i。
		{                                     
			for(int k=0;k<30;k++)             //寻找字母对应代码。
			{
				if(code[i]==letter[k].c)
				{
					mima+=letter[k].str;      //代码累加。
					num[i]=letter[k].length;  //记录数字,数字--i。
					break;
				}
			}
		}
		int position=0;
		for(int i=code.length()-1;i>=0;i--)                        //执行i次,转换代码。
		{
			for(int k=0;k<30;k++)
			{
				if(mima.substr(position,num[i]).compare(letter[k].str)==0)
				{
					position+=num[i];
					new_code+=letter[k].c;
					break;
				}
			}
		}
		cout<<++count<<':'<<' '<<new_code;
		if(n)
			cout<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值