实验题3:实现顺序串的各种模式匹配算法
目的:掌握串的模式匹配算法(BF和KMP算法)设计。
内容:编写一个程序exp4-3.cpp,实现顺序串的各种模式匹配算法,并在此基础上完成以下功能。
(1)建立目标串s="abcabcdabcdeabcdefabcdefg"和模式串t="abcdeabcdefab"。
(2)采用简单匹配算法求t在s中的位置。
(3)由模式串t求出next数组值和nextval数组值。
(4)采用KMP算法求t在s中的位置。
(5)采用改进的KMP算法求t在s中的位置。
c++代码:
BF算法:
#include <iostream>
#define MaxSize 100
using namespace std;
typedef char ElemType;
typedef struct
{
char data[MaxSize];
int length;
}SqString;
//生成串
void StrAssign(SqString &s,char cstr[])
{
int i;
for (i=0;cstr[i]!='\0';i++)
s.data[i]=cstr[i];
s.length=i;
}
//销毁串
void DestroyStr(SqString &s)
{
}
//串的复制
void StrCopy(SqString &s,SqString t)
{
int i;
for (i=0;i<t.length;i++)
s.data[i]=t.data[i];
s.length=t.length;
}
//BF算法
int BF(SqString s,SqString t)
{
int i=0,j=0;
while (i<s.length && j<t.length)
{
if(s.data[i]==t.data[j])
{
i++;j++;
}
else
{
i=i-j+1;j=0;
}
}
if(j>=t.length)
return(