查詢字串子串的位置的操作,稱為串的模式匹配,子串被稱為模式串。
串的模式匹配是非常高頻的操作,具體如何去匹配的演算法也很重要。
樸素模式匹配演算法也稱為布魯特-福斯演算法,感覺很是高大上,但是實現起來很簡單。
樸素的意思就是最符合咱們樸素思維的演算法,從主串的第乙個字元開始與子串進行比對,如果相等則逐一比對後續字元;如果不等則從主串第二個字元開始匹配子串,直到發現全部相等的子串。
兩層迴圈就可以解決,完整**如下:
#
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 串相等 ...