1.朴素匹配法
#include <iostream>
using namespace std;
void naive_string_match( char *txt , char *pat)
{
int len_txt = strlen(txt);
int len_pat = strlen(pat);
int i, j ;
for( i=0; i<len_txt-len_pat ; i++ ) {
for( j=0 ; j<len_pat ; j++){
if( txt[i+j]!=pat[j] ) break;
}
if( j == len_pat ) cout<<"position:"<<i<<endl;
}
}
int main()
{
char *txt = "AABAACAADAABAAABAA";
char *pat = "AABA";
naive_string_match(txt, pat);
}
2.另一种暴力思路
void ViolentMatch(char* s, char* p)
{
int sLen = strlen(s);
int pLen = strlen(p);
int i = 0,j = 0;
int flag=-1;
while (i < sLen && j < pLen)
{
if (s[i] == p[j])
{
//①如果当前字符匹配成功(即S[i] == P[j]),则i++,j++
i++;
j++;
}
else
{
//②如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0 ,i 相当于右移一位
i = i - j + 1;
j = 0;
}
if (j == pLen)
{
cout<< i - j<<endl;
flag=1;
j=0;
}
}
//匹配不成功
if(flag==-1) cout<< flag<<endl;
}
3.KMP算法(天啊!理解吃力!)