演算法**如下,包括暴力匹配和kmp演算法。
參考
#include "stringmatching.h"
stringmatching::stringmatching(void)
stringmatching::~stringmatching(void)
/*返回子串t在主串s中第pos個字串之後的位置。若不存在,則返回0*/
int stringmatching::******stringmatch(char* s ,char* t,int pos)
else
}if (j == tlen)
return i - j;
else
return -1;
}//kmp模式匹配演算法
/*通過計算返回子串t的next陣列*/
void stringmatching::get_next(char* t,int *next)
else
}}//改良後的kmp演算法,只改進next陣列的推導
/*通過計算返回子串t的next陣列*/
void stringmatching::get_nextval(char* t,int *nextval)
else
}}//flag不為0是改善後的kmp
int stringmatching::kmp(char* s,char* t ,int pos,int flag)
else
while (i < slen && j < tlen)
else
}if (j == tlen)
return i - j;
else
return 0;
}
測試**如下
void test_stringmatch()
資料結構 字串匹配KMP
kmp主要用於字串匹配 關鍵在於next陣列的求解,當匹配不成功的時候模式串的回退位置就由next陣列決定。next陣列只與主串有關,其求解過程就運用到了kmp思想,求解過程網上很多,個人覺得比較難以理解。next陣列應用,下標從1開始 字首與字尾的最大匹配長度,next i 為字首與字尾的最長匹配...
資料結構 字串 模式匹配
我們先把模式串標出序號 接著把模式串所有字首依次列出來 接下來把每乙個子串相等的字首和字尾的最大長度求出,舉個例子 abaab 觀察子串,前字尾ab相同,因此返回2 5.依次類推,我們可以得到每乙個子串對應的一組序列 當時這組資料並不是所要求的next陣列,可以將其稱為部分匹配值表,相應c 如下 獲...
資料結構 字串的模式匹配
什麼叫做模式匹配呢?其實就是看字串s中是否有子串t,那麼t就叫匹配串。我們平時查詢方式是逐個匹配,那麼時間複雜度就是o n m 比如s abcabde t abd 那麼比較的時候s 1 t 1 所以接下來比較s 2 和t 2 結果s 2 t 2 那麼接下來就比較s 3 和t 3 這一次比較匹配不上。...