從主串 s 的第 pos 個字元起和模式 t 的第乙個字元比較之,若相同,則繼續比較後續字元;否則從主串 s 的下乙個字元起再重新和模式 t 的字元比較之。
例:s = 『jinanshi』,t = 『nan』。
當採用定長順序儲存結構時,實現此操作的演算法如下:
int
index
(sstring s, sstring t,
int pos)
// 繼續比較後繼字元
else
// 指標後退重新開始匹配 }if
( j >t[0]
)return i -t[0]
;else
return0;
}// index
#include
#include
#define maxstrlen 255
//儲存結構
typedef
unsigned
char sstring[maxstrlen +1]
;//基於該儲存結構實現樸素的模式匹配
intindex
(sstring s, sstring t,
int pos)
// 繼續比較後繼字元
else
// 指標後退重新開始匹配 }if
(j > t[0]
)return i - t[0]
;else
return0;
}bool
strassign
(sstring str,
char
* src)}}
return
true;}
intmain()
設計思想簡單、易於理解。
通常情況下,效率比較高。經常被程式設計師選用。
此時演算法的時間複雜度為:o(n+m)
m、n分別為主串和子串的長度。
某些特殊的情況下,效率比較低。
此時演算法的時間複雜度為:o(n*m)
m、n分別為主串和子串的長度。
串的模式匹配(C語言實現) BF演算法
串的模式匹配演算法 子串的定位運算 演算法思想 設有主串s,模式t。有 i 和 j 分別指向s和j的首個元素。i 1 j 1 設有pos。pos指t在s中首次出現的位置的首位址。初始指向s的首元素。將t中的首個元素與s中首個元素對比 若相同 i 與j 對比 關於儲存 採用定長順序儲存結構。ps 從下...
串之樸素的模式匹配演算法
一 串的模式匹配的定義 這個問題其實就是乙個字串在乙個大的字串中的定位問題。這種子串的定位問題的操作通常叫做串的模式匹配 二 舉例說明 假如主串是s qbfhilmeach 模式串 p hilk 現在我們需要在主串中找到模式串。它的匹配過程如下 直到匹配成功 簡單得來說,就是對主串的每乙個字元作為子...
資料結構之串的模式匹配(C語言實現)
一 暴力匹配演算法 bf bf全稱為brute force,最簡單直觀的模式匹配演算法。1.演算法思想 兩個字串進行匹配時,乙個主串和乙個模式串,就是按照我們最容易想到的演算法來進行匹配。用兩個變數i,j分別記錄主串和模式串的匹配位置,如果兩者在某個字元不匹配,則將記錄主串匹配位置的變數i回退到匹配...