数据结构(C语言)- 串的KMP模式匹配算法

本文介绍了如何使用C语言实现KMP算法进行串的模式匹配,详细讲解了串的结构定义、初始化、计算next[]数组以及KMP匹配过程。并提供了一组测试集和优化的next[]求解方法,最后展示完整代码和匹配结果。
摘要由CSDN通过智能技术生成

参考《数据结构(C语言版)》- 严蔚敏 吴伟民 - 清华大学出版社

串的结构定义

typedef unsigned char SString[MAXSTRLEN + 1];		//字符型数组

串的初始化

void Init_String(SString S)
{
	printf("字符串长度:");
	scanf_s("%d", &S[0]);
	printf("\n请输入字符串:");
	getchar();							//吸收换行符,否则scanf自动接收\n
	for (int i = 1; i <= S[0]; i++)
		scanf_s("%c", &S[i]);
	printf("\n");
	getchar();							//同上
}

获得模式串的next[]

void get_index_2(SString T, int next[])
{
	int j = 3; next[1] = 0, next[2] = 1;		//按照规则,第一位为0,第二位为1,从第三位开始
	while (j <= T[0])
	{
		for (int k = 2; k < j; k++)				//1<k<j,对每个k都要判断
		{
			int i = 1;
			for (i; i < k; i++)					//逐个对比'p1...pk-1'和'pj-k+1...pj-1'
				if (T[i] != T[j - k + i])		//存在一个字符不同则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值