C语言数据结构KMP算法实现模式串主串匹配(数据结构第三次试验)

KMP算法中虽然计算了nextval的值,但我在此次并没有用到。


课程名称:数据结构

实验项目名称:串基本操作的实现

实验目的:

1.掌握串的模式匹配操作。

实验要求:

1、    分别使用BF和KMP算法完成串的模式匹配。

实验过程:

1、    设计完成next值的计算函数;

2、    设计完成修正next值的函数;

3、    KMP算法代码;

4、    输入子串(abbc)和主串(abbabbcad)

5、    输出子串在主串中开始的位置。

实验报告中给出next,修正next,KMP及主函数的代码。

实验结果:

输入: 子串:abbc; 主串:abbabbcad

输出:4

实验分析:

1.普通next和修正next的区别;

2.列举调试运行过程中出现的错误并分析原因。

要求:

(1) 程序要添加适当的注释,程序的书写要采用缩进格式

(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。

(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

(4) 上传源程序到课堂派。顺序表的源程序保存为Stringindex.cpp



#include
#include
#define OK 1
#define ERROR 0
#define MAXSIZE 255
typedef int Status;
typedef char ElemType; 
//定义模式串的顺序表 
typedef struct
{
	char ch[MAXSIZE+1];
	int next[MAXSIZE+1];
	int nextval[MAXSIZE+1];
	int length;
}S1String;
//定义主串的顺序表 
typedef struct
{
	char ch[MAXSIZE+1];
	int length;
}S2String;
//初始化模式串 
Status Init_S1(S1String &S1)
{
	S1.length=0;
	return OK;
}
//初始化主串 
Status Init_S2(S2String &S2)
{
	S2.length=0;
	return OK;
}
//求的模式串的next 
Status Get_S1_next(S1String &S1)
{
	int i=1;
	S1.next[1]=0;
	int j=0;
	while(iS1.length)
			{
				return result;	
			} 
		}
	}
}
int main()
{
	char s1[255];
	char s2[255];
	int result;
	S1String S1;
	S2String S2;
	Init_S1(S1);
	Init_S2(S2);
	printf("请输入模式串:");
	scanf("%s",&s1);
	printf("请输入主串:");
	scanf("%s",&s2);
	//字符数组进入主串和模式串 
	for(int i=0;i<=strlen(s1)-1;i++)
	{
		S1.ch[i+1]=s1[i];
		S1.length++;
	}
	for(int j=0;j<=strlen(s2)-1;j++)
	{
		S2.ch[j+1]=s2[j];
		S2.length++;
	}
	//求结果 
	Get_S1_next(S1);
	Get_S1_nextval(S1);
	result=Compare(S1,S2);
	printf("结果是:%d",result);	
}


你可能感兴趣的:(C语言)