增強型的模式匹配演算法,
kmp查詢演算法。全稱是克努特
-莫里斯
-普拉特演算法。是一種在乙個串內查詢第乙個匹配子串位置的演算法。之所以是增強型的,是應為它修改普通演算法中失配的時候,被查詢串的查詢起始位置只向後移動乙個單位的辦法。通過首先分析匹配串的邏輯,給每乙個專案位置加入乙個權值。這樣在失配的時候,就可以根據失配專案單位所對應的權值,順移多個位置再次匹配。具體的演算法可以參考《資料結構》一書。
現在我用
vb.net 2003
實現這個演算法。主函式
kmpsearch
進行實際的匹配操作。子函式
kmpsearchgetnextarray
負責計算匹配串每個專案單位對應的權值。
稍後推出使用
vb2005
泛型的kmp
查詢演算法。
public
shared
function
kmpsearch(byval
srcas
array, byval
keyas
array) as
integer
dimretas
integer = 0
dimarrnext() as
integer
diminti
asinteger = 1
dimintj
asinteger = 1 if
srcis
nothing
orelse
keyis
nothing
orelse
key.length > src.length
then
ret = -1
else
arrnext = kmpsearchgetnextarray(key)
while
inti
<= src.length
andalso
intj
<= key.length if
intj = 0
orelse (equals(src(inti - 1), key(intj - 1)) = true) then
inti = inti + 1
intj = intj + 1
else
intj = arrnext(intj)
endif
endwhile if
intj > key.length
then
ret = inti - key.length - 1
else
ret = -1
endif
endif
return
ret
endfunction
private
shared
function
kmpsearchgetnextarray(byval
keyas
array) as
integer()
dimarrnext(key.length) as
integer
dimintj
asinteger = 1
dimintk
asinteger = 0
arrnext(1) = 0
while
intj
< key.length if
intk = 0
orelse (equals(key(intj - 1), key(intk - 1)) = true) then
intj = intj + 1
intk = intk + 1
arrnext(intj) = intk
else
intk = arrnext(intk)
endif
endwhile
return
arrnext
endfunction
VB的檔案拖放實現
vb中,很多控制項都可以實現拖放功能。拖放功能有內部控制項間的拖放和由程式外部對程式本身的拖放。檔案拖放應該使用oledragdrop事件,而不是dragdrop事件。oledragdrop事件的語法如下 private subobject oledragdrop data as dataobjec...
在VB6,VS2003的程式加XP面板
在vb6,vs2003的程式加xp 一 新增以下部分為模組檔案 option explicit private declare function getversionex lib kernel32 alias getversionexa lpversioninformation as osversi...
VB工程下的各個檔案
ctl vb 使用者控制項 的 檔案 儲存了其中的 屬性等 ctx vb 使用者控制項 的資源檔案 儲存了該使用者控制項中使用的 ico等資源 frm vb 窗體 的 檔案 儲存了其中的 屬性等 frx vb 窗體 的資源檔案 儲存了該使用者控制項中使用的 ico等資源 bas vb 模組 的 檔案...