C語言基礎-連結串列(二)動態建立連結串列、頭插法、尾插法
阿新 • • 發佈:2021-01-12
【阿杰程式4】Morse密碼翻譯
原題目名字:P,MTHBGWB
題目給人都看傻了,網上搜題解的時候看見了這個神碼。
可惜題解是圖片形式,搜不到而且很冷門,
但是結構體用的真的是很精妙。
當時印象非常深刻,想著就算沒學過結構體也要硬著頭皮仿一個。
比較神奇的是出了一個bug:
網頁複製字母對應morse碼,滑鼠拖長過了程式碼框,結果把程式碼框外面的製表符複製來了(複製來的製表符在vs裡不顯示!這意味著幹看是沒有bug的!只能通過執行模擬過程debug)。
因為這個卡了兩天,最後硬是輸出過程中程式碼轉換的部分,發現多處一堆空格(黑人問號),最後鎖定了一個字母的程式碼有錯,但神的是對著程式碼表查不出錯誤(製表符不顯示,永遠看不出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; }