字串的模式匹配,KMP演算法

2021-07-12 02:19:53 字數 1080 閱讀 4376

kmp演算法是模式匹配的一種改進的演算法,所謂的模式匹配也就是對於兩個字串主串s和模式串t。從主串的s的pos個字元起和模式串中的第乙個字元進行比較,如果相等,則繼續比較後面的字元,否則從主串的下乙個字元重新和模式串 中的字元進行比較,依次類推直到模式t中的每乙個字元依次和主串中的s中的乙個連續的字串行相等,我們成為是匹配成功。kmp演算法能夠提高匹配的效率,當一趟匹配過程中出現主串和模式串中的字元不相等的時候,不需要回溯指標,而是利用已經匹配的部分的結果將模式向右滑動盡可能遠的一段距離後繼續進行比較。

#include

#include

using namespace std;

#define maxstrlen 255

typedef char sstring[maxstrlen+1];

int next[maxstrlen];//next成為去全域性變數

int nextval[maxstrlen];//nextval成為全域性變數

void get_next(sstring t)

else}}

int strlen(sstring s)

int index_kmp(sstring s,sstring t,int pos)

else

j=next[j];

}if(j>t[0])

return i-t[0];

else

return 0;

}int main()

break;

case '2':

cout<<"請輸入在主串中開始匹配的位置:"cin>>pos;

pos=index_kmp(s,t,pos);

if(pos)

else

break;

default:

break;}}

return 0;}

上面這個程式是乙個kmp演算法的例子,首先輸入兩個串,s和t,其中s作為主串,t作為模式串,然後我們計算t的匹配值也即是next,其中這一步是必須進行的,因為next決定著向右滑動的距離。使用者可以按照選擇,首先選擇1然後選擇2,最後返回值是當t是s的子串的時候返回的是t在s中的位置,否則返回為0,也即是匹配失敗。

字串模式匹配KMP演算法

next的值去改變每次匹配的位置 注意 字串的儲存最好用字元陣列,然後用字元輸入的形式,保證正確!利用求模式串的next值來分析遍歷,可以在不改變主串i的值的基礎上,只改變next j 的下標來遍歷 next j include include using namespace std void ge...

字串模式匹配KMP演算法

字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...

字串模式匹配KMP演算法

字串模式匹配指的是,找出特定的模式串在乙個較長的字串中出現的位置。很直觀的可以寫出下面的 來找出模式串在乙個長字串中出現的位置。1 2 樸素的模式匹配演算法 3 功能 字串的模式匹配 4 引數 5 s 目標串 6 p 模式串 7 pos 開發匹配的位置 8 返回值 9 匹配成功,返回模式串在目標串的...