一、朴素匹配算法
也就是暴力匹配算法。设匹配字符串的长度为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] = {'