一、设计任务:
编写程序,利用顺序串的基本运算,建立目标串以及模式串,用BF算法求出t在s中的位置,求出模式串的next数组以及nextval数组。KMP算法使用next数组以及改进的KMP算法使用nextval数组求出t在s中的位置,并给出经过各种模式匹配算法的结果。
二、源代码:
头文件:
#define MaxSize 100 //指定串的最大长度
class PatternMatching {
//模式匹配
public:
typedef struct
{
char data[MaxSize]; //串字符
int length; //串长
} SqString; // 声明顺序串类型
//静态方法
static void StrAssign(SqString &s, const char cStr[]); //生成串
static void DestroyStr(SqString &s); //销毁串
static void DispStr(SqString s ); //输出串
static int BF(SqString s,SqString t); //BF算法
static void GetNext(SqString t,int next[]); //求next数组
static int KMPIndex(SqString s,SqString t); //KMP算法
static void GetNextVal(SqString t,int nextVal[]); //求nextVal数组
static int KMPIndexImprove(SqString s,SqString t); //改进后的KMP算法
};
源文件:
#include "PatternMatching.h"
#include <iostream>
using namespace std;
int main()
{
PatternMatching::SqString s, t; //声明目标串s和模式串t
int next[MaxSize];
int nextVal[MaxSize];
PatternMatching::StrAssign(s, (char *) "abcabcdabcdeabcdefabcdefg"); //生成串
PatternMatching::StrAssign(t, (char