1. 程式人生 > 其它 >C語言基礎-連結串列(二)動態建立連結串列、頭插法、尾插法

C語言基礎-連結串列(二)動態建立連結串列、頭插法、尾插法

技術標籤:入門新手debug字串

【阿杰程式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;
}