C语言KMP算法与字符串朴素的模式匹配算法(暴力)编程小白必学

本文介绍了C语言中KMP算法和朴素的模式匹配算法。讲解了串的基本概念,串的比较原则,以及两种模式匹配算法的工作原理。通过实例详细解释了KMP算法如何避免不必要的回溯,提高匹配效率,并提供了部分匹配表的计算方法和算法流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、串的定义

串是由零个和多个字符组成的有限序列,又名叫字符串。一般记为  s="a1a2a3.......an"(n>=0),其中s是串的名字,用双引号括起来的字符序列是串的值。串中的字符长度n称为串的长度。零个字符的串称为空串。

还有一些概念需要解释

子串与主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。子串在主串中的位置就是字串的第一个字符在主串中的序号。

二、串的比较

比如说,s=“happ” ,t=“happy”;s与t的前四位字符是一样的,而t第五为有字符,故t>s。再比如说s=“happy”,t=“happc”;由于第五位y的ASCII值大于c的ASCII值,所以s>t;总的来说,当两串的长度相同,且对应位置上的字符ASCII值相同,那么这两串才相等。怎么判断两串的大小呢,判断两串第一处不相等的元素的ASCII值,谁的ASCII值大,那个串就大。

三、朴素的模式匹配算法

又称为“暴力匹配算法”。比如说我们需要在一篇文章例找一个单词的定位。这种子串的定位操作通常称做串的模式匹配。

假如我们需要从下面的主串S=“goodgoogle”中,找到T=“google”这个子串的位置。我们通常需要下面的步骤。

1、从主串s第一位开始,s与t的前三位“goo”匹配成功,但s的第四位是‘d’,t的第四位是‘g’,所以第一位匹配失败

2、接下里从主串s的第二位开始,主串s首字母是‘o‘,而子串t的首字母是’g‘,所以匹配失败。

3、接下来从主串的第三位开始,主串首字母是’o‘,而子串的首字母是’g‘,所以匹配失败。

4、接下来从主串的第四位开始,主串首字母是’d‘,而子串的首字母是’g‘,所以匹配失败。

5、接下来从主串的第五位开始,主串首字母是’g‘,而子串的首字母是’g‘,相同,且子串的6个字母完全匹配成功,所以就能找到子串t在主串s中的位置下标为4。

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int Index(char* s,char* t,int lens,int lent,int* beginpos)
{
	int i = *beginpos;
	int j = 0;
	while (i <= lens - 1&&j<=lent
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值