作者Aligu1009 (=.=)
看板C_and_CPP
標題[問題] decode url string
時間Fri Oct 15 23:03:04 2010
這是我在面試某間公司時被問的問題
不過我沒有簽保密協定,所以透露題目跟大家討論一下應該okay吧 :p
URL中的"%"符號及其後面的兩個字元可以代表某些特殊符號
如:"%20"代表空白" "
若給予 "%??" 與其代表的值的對應
請寫出一個程式能decode url
這個題目比較複雜的地方在於下面這種狀況:
假設"%ab"代表"2"
則"%
%ab0"會先decode成"%
20", 再decode成" "
所以,若輸入 "
http://www.url.com/%%ab0123"
則要輸出:"
http://www.url.com/ 123"
我用recursive的方式寫了一個小程式
後來主考官要我用非recursive的方式再寫一次
我寫得有一點卡 XD
後來回家自己再寫一次非遞回的版本,
寫是寫出來了,但是竟然寫了一個小時,
主考官當初這題連同講解題目可是只給我10min解題 orz...
我大致上的解法(非遞迴)是用stack來解,
遇到%就inital一個stack,
然後開始判斷後面哪些字元要做push, pop
當stack為空時,就代表目前這個部份的string 已被decode
Ex:
string cur_word stack 說明
%%ab0123 % [%] push % to stack
%ab0123 % [%%] push % to stack
ab0123 a [%%a] push a to stack
b0123 b [%%ab] push b to stack
[%] pop %, a, b, decode %ab to 2
[%2] push 2 to stack
0123 0 [%20] push 0 to stack
[] pop %, 2, 0, decode %20 to " "
stack size is zero. Finish decoding this part
拿出來跟版友們討論一下,不知道各位有沒有什麼比較好的解法呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 75.102.87.217
※ 編輯: Aligu1009 來自: 75.102.87.217 (10/15 23:13)
推 purpose:覺得用stack還是算遞迴,只不過你自己模擬而已 10/15 23:05
→ uranusjr:你舉例的網址和說明不太一樣耶 10/15 23:07
→ Aligu1009:Sorry已更正例子中的筆誤 10/15 23:14
→ Aligu1009:to purpose大,的確stack在概念上也是遞迴,有其他建議嗎? 10/15 23:17
推 purpose:想不到耶。說個題外話,你舉的例子 %%ab0 我覺得怪怪的 10/15 23:32
→ purpose:我用IE、Firefox去模仿一個類似的 %%341 其實瀏覽器也不會 10/15 23:32
→ purpose:去遞迴的把這個網址解碼 %%341 -> %41 -> A。不會解碼出A 10/15 23:33
→ purpose:ttp://liu.twbbs.org/liuzmd1/index.php?tde_string=%%341 10/15 23:35
推 Aligu1009:該例子不一定符合真實狀況,只是主考官的一個模擬題而已吧 10/15 23:39
推 BlazarArc:請問 %?? 有可能會decode出 "%" 這個字元嗎? 10/16 00:02
→ manlike:亂弄一通 你的stack版有邏輯嗎? 完全都沒有描述演算法~ 10/16 00:12
→ manlike:這題就從後面往前解碼就行了 一個pass搞定~ 10/16 00:13
推 purpose:%25 解碼後會變成 %,就是依照 ASCII 編碼 10/16 00:15
→ purpose:manlike大厲害 10/16 00:17
→ firose:請問用遞迴寫比較簡單嗎? 10/16 00:17
推 meconin:不是 compiler parser 的問題嗎? 10/16 11:08
※ 編輯: Aligu1009 來自: 68.232.127.230 (10/16 23:14)