看板 Visual_Basic 關於我們 聯絡資訊
: 推 JacobTai:漂亮... : → MOONRAKER:那麼複雜的函數呼叫26次 我不認為這哪裡漂亮 : → MOONRAKER:只是表面上比較好維護而已 : → MOONRAKER:當然最好的辦法是用scripting.regex : → Y78:不想呼叫那麼多次函數的話 : → Y78:不知道用陣列的方式會不會比較好? : → Y78:Dim str() : → Y78:str = array("A","B"...."Z") : → Y78:for i = 0 to 25 : → Y78:str2 = replace(str2,str(i),"#") : → Y78:next for i=0 to 25,還不是要呼叫26次 複雜的是replace(),不是asc() 以長度 k 的字串來說, 用replace取代其中一個字元,每一個字元都要看過,複雜度 Θ(k) 跑26次,複雜度 Θ(26k) 本人的第一個寫法(見第一篇回應),這是一個老屁股寫法 只要從頭到尾看字串一次,複雜度 Θ(k),而且一次replace都用不到 至於本人以上說的regex (regexp, regular expression, 正規表示式, 正則表示式, whatever) 這也是一種老屁股寫法,但是歷久彌新,也不是大家都會,但是會了會比較爽 微軟本來還自己搞爛爛的簡易regex,後來不得不加上完整的regex支援,就是明證 為免口說無憑,以下特示範一次 註:這是VBA的,執行前要到功能表/工具/設定引用項目把 Microsoft VBScript regular expressions 5.5 勾起來 VBScript(用於舊的ASP)我也用過沒問題,怎麼引用忘了,程式不在手上 VB6我沒真的寫過,目前不能裝,但是應該不脫VBA的方法 Sub abc() s0 = "Hello! Today is 6th of March, 2009." s1 = "It was saw sLOwly slewing in snow" Set regex0 = New regexp Set regex1 = New regexp regex0.Pattern = "[A-Za-z]" 'regex內容: 所有大寫字母和所有小寫字母 regex0.Global = True 'global選項: 找出全部符合字串 '(不設就只會取代第一個符合字串, 你可以去掉這行試試看) regex1.Pattern = "s(\w+)w" '任何以 s 開頭,w 結尾,任意長度的字串 regex1.Global = True MsgBox "before: " & vbCrLf & s0 & vbCrLf & s1 s0 = regex0.Replace(s0, "#") s1 = regex1.Replace(s1, "***") MsgBox "after: " & vbCrLf & s0 & vbCrLf & s1 End Sub   -- BATCH 03 : 買張床 - 切達大俠 - 伐木人之歌 - http://tinyurl.com/3zpyx5 [B4準備中]: 謳歌金錢(7/02) - 單車超人(7/23) - http://tinyurl.com/66v6vq [ 番外篇 ]: 包租婆也有過當羅莉的時候(7/17) - http://tinyurl.com/6j4ale ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 蒙帝派松正體中文計畫 Spam-a-lot and enjoy the pythonesque delight! ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ http://www.youtube.com/user/JamesBondXD▄▄ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.112.192.152 ※ 編輯: MOONRAKER 來自: 59.112.192.152 (03/07 00:12)
Y78:阿 原來是replace的問題 orz 03/07 12:56
Y78:你的方法的確快很多很多 03/07 13:05
MOONRAKER:可是前一個方法是錯的 X( 不過我還是推薦大家學regex :) 03/07 13:35
yellissckk:恩 謝謝你囉 03/07 16:29