C語言資料結構 9 串的樸素模式匹配演算法

2021-10-09 15:48:13 字數 1543 閱讀 3969

查詢字串子串的位置的操作,稱為串的模式匹配,子串被稱為模式串。

串的模式匹配是非常高頻的操作,具體如何去匹配的演算法也很重要。

樸素模式匹配演算法也稱為布魯特-福斯演算法,感覺很是高大上,但是實現起來很簡單。

樸素的意思就是最符合咱們樸素思維的演算法,從主串的第乙個字元開始與子串進行比對,如果相等則逐一比對後續字元;如果不等則從主串第二個字元開始匹配子串,直到發現全部相等的子串。

兩層迴圈就可以解決,完整**如下:

#

include

#define

max_length

100/*

* 主題:串的樸素模式匹配演算法

*///字串結構體

typedef

struct

string;

//列印字串

void

printstr

(string *str)

//請空字串

void

clearstr

(string *str)

//返回字串長度

intgetstrlength

(string *str)

//判斷字串是否為空 是1 否0

intisempty

(string *str)

else

}//新增字元

int(string *str,

char c)

else

//長度不足,返回失敗0

}//插入字元,index從0開始,注意需要將後面的字元全部向後挪乙個位置

intinsertchar

(string *str,

int index,

char c)

str->content[index]

= c;

//將插入元素放入指定位置

return1;

}else

//長度不足,返回失敗0

}//刪除指定位置元素,index從0開始,直接從後面往前覆蓋即可

intdeletechar

(string *str,

int index)

return1;

}//將str2連線到str1

intconcat

(string *str1, string *str2)

//依次取出str2中元素追加到str1

for(i =

0; i < str2->length; i++

)return1;

}// 樸素模式匹配,返回值-1匹配失敗,其他返回值為匹配成功的起始位置

intindex

(string *str1, string *str2)if(

!(str1->content[position + i]

== str2->content[i]))

}if(i == str2->length)

position++;}

return-1

;}intmain()

資料結構04 串的樸素匹配

在串的問題裡,匹配是很重要的一類問題。匹配是在乙個給定的主串中尋找乙個相同的子串,確定子串出現的位置。乙個樸素的做法是,將主串和子串逐字元比較。用指標移動兩字元。步驟如下 1 有兩指標,其中乙個i指向主串查詢的位置,另外j乙個指標指向子串的首位。2 比較兩指標所指的字元。如果相同,兩指標都移動一位。...

資料結構 串的樸素模式和KMP匹配演算法

一 樸素模式 假設我們要從主串s goodgoogle 中找到子串t google 的位置,步驟如下 i表示主串的當前位置下標,j表示子串的當前位置下標,如上圖在第一輪比較 i 1開始 中j 4和i 4的位置不匹配,接下來就要指標回退,從i 2開始比較,如下 如此反覆直到比較到 i 主串長度 子串長...

資料結構 串 C語言

串的概述 串 字串 由n n 0 個字元組成的有限序列。一般記作s s0,s1,s2,sn 1 其中s稱作串名,n稱作串的長度,雙引號括起來的字串行稱作串的值。子串 乙個串中任意個連續的字元組成的子串行。主串 包含子串的串稱為子串的主串。該字元在串中的位置 乙個字元在乙個串中的位置序號 0 串相等 ...