串的SF匹配算法,算法核心思想是:首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不等,则T向右移动一个字符的位置,再依次进行比较。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],则匹配成功;否则失败。该算法最坏情况下要进行M*(N-M+1)次比较,时间复杂度为O(M*N)。
// 串的匹配算法.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
void BFMacth(char *comment,char *str) //BF字符串匹配算法,用变量记录此时主串指针替代指针不用回溯
{
int i=0,j=0;
int sum=0;
while(i<strlen(comment))
{
int a=i;
j=0;//模式串指针回溯
while(comment[a]==str[j]&&j<strlen(str))
{
a++;
j++;
}
if(j==strlen(str))
cout<<a-2<<endl;
i++;
}
}
void BFMacth2(char *comment,char *str) //BF字符串匹配算法,主串指针回溯
{
int i=0,j=0;
while(i<strlen(comment))
{
j=0;//模式串指针回溯
while(comment[i]==str[j]&&j<strlen(str))
{
i++;
j++;
}
if(j==strlen(str))
cout<<i-2<<endl;
i=i+1-j; //主串指针回溯
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char *comment="00010101001000000001010";
char *str="10";
BFMacth2(comment,str);
return 0;
}