一、朴素匹配算法
也就是暴力匹配算法。设匹配字符串的长度为n,模式串的长度为m,在最坏情况下,朴字符串匹配算法执行时间为O((n - m + 1)m)。
假设m = n / 2, 那么该算法的复杂度就是Θ(n ^ 2)。因为不须要预处理。朴素字符串匹配算法执行时间即为其匹配时间。
strstr()函数就能够用这种方法实现,虽然效率不高:
//strstr函数
char *strStr(const char *str, const char *substr) {
if (substr == NULL || str == NULL)
return NULL;
if (!*substr)
return const_cast<char*>(str);
const char *p1 = str;
const char *p2 = substr;
const char *p1_advance = str;
//p1_advance指针前进strlen(substr)-1位
//由于当str中还未匹配的位数小于substr的长度时,肯定不可能再匹配成功了
for (p2 = substr + 1; *p2; ++p2)
++p1_advance;
for (p1 = str; *p1_advance; p1_advance++) {
char *p1_old = (char *)p1;
p2 = substr;
while (*p1 && *p2 && *p1 == *p2) {
++p1;
++p2;
}
if (!*p2)
return p1_old;
p1 = p1_old + 1;
}
return NULL;
}
int main() {
char str[100] = {'