实验三 串的模式匹配

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三串的模式匹配

一、实验目的

1.利用顺序结构存储串,并实现串的匹配算法。

2.掌握简单模式匹配思想,熟悉KMP算法。

二、实验要求

1.认真理解简单模式匹配思想,高效实现简单模式匹配;

2.结合参考程序调试KMP算法,努力算法思想;

3.保存程序的运行结果,并结合程序进行分析。

三、实验内容

1、通过键盘初始化目标串和模式串,通过简单模式匹配算法实现串的模式匹配,匹配成功后要求输出模式串在目标串中的位置;

2、参考程序给出了两种不同形式的next数组的计算方法,请完善程序从键盘初始化一目标串并设计匹配算法完整调试KMP算法,并与简单模式匹配算法进行比较。

四、程序流程图、算法及运行结果

3-1

#include

#include

#define MAXSIZE 100

int StrIndex_BF(char s[MAXSIZE],char t[MAXSIZE])

{

int i=1,j=1;

while (i<=s[0] && j<=t[0] )

{

if (s[i]==t[j]){

i++;

j++;

}

else {

i=i-j+2;

j=1;

}

}

if (j>t[0])

return (i-t[0]);

else

return -1;

}

int main()

{

char s[MAXSIZE];

char t[MAXSIZE];

int answer, i;

printf("S String -->\n ");

gets(s);

printf("T String -->\n ");

gets(t);

printf("%d",StrIndex_BF(s,t)); /*验证*/

if((answer=StrIndex_BF(s,t))>=0)

{

printf("\n");

printf("%s\n", s);

for (i = 0; i < answer; i++)

printf(" ");

printf("%s", t);

printf("\n\nPattern Found at location:%d\n", answer); }

else

printf("\nPattern NOT FOUND.\n");

getch();

return 0;

}

3-2

#include

#include

#define MAXSIZE 100

void get_nextval(unsigned char pat[],int nextval[])

{

int length = strlen(pat);

int i=1;

int j=0;

nextval[1]=0;

while(i

{

if(j==0||pat[i-1]==pat[j-1])

{

++i;

++j;

if(pat[i-1]!=pat[j-1]) nextval[i]=j;

else nextval[i]=nextval[j];

}

else j=nextval[j];

}

}

int Index_KMP(unsigned char text[], unsigned char pat[],int nextval[]) {

int i=1;

int j=1;

int t_len = strlen(text);

int p_len = strlen(pat);

while(i<=t_len&&j<=p_len)

{

if(j==0||text[i-1]==pat[j-1]){++i;++j;}

else j=nextval[j];

}

if(j>p_len) return i-1-p_len;

else return -1;

}

int main()

{

unsigned char text[MAXSIZE];

unsigned char pat[MAXSIZE];

int nextval[MAXSIZE];

int answer, i;

printf("\nBoyer-Moore String Searching Program"); printf("\n====================================");

printf("\n\nText String --> ");

gets(text);

printf( "\nPattern String --> ");

gets(pat);

get_nextval(pat,nextval);

if((answer=Index_KMP(text, pat,nextval))>=0)

{

printf("\n");

printf("%s\n", text);

for (i = 0; i < answer; i++)

printf(" ");

printf("%s", pat);

printf("\n\nPattern Found at location %d\n", answer); }

else

printf("\nPattern NOT FOUND.\n");

getch();

return 0;

}

相关文档
最新文档