字符串匹配问题 kmp算法C语言实现

C语言 字符串匹配问题,KMP函数-失配函数 有两个字符串,一个为str,一个为pat。 我们的目的是查找pat在str中出现的位置。最简单的办法无非就是两层循环。for(int i=0; i<strlen(str); i++) { for(int j=0; j<strlen(pat); j++) { if(str[i+j] != pat[j] break; } if(j 阅读详情
/*
NO.1
O(n^2)的算法:
*/

/*枚举主串的每一个位置开始比较*/

#include 
<stdio.h>

#define MAX 101

int main(void)
{
    
char a[MAX],b[MAX];
    
int la=0,lb=0,i,j,k ;
    
char c  ;
     
    
while ( (c =getchar())!= ' ')
    a[
++la] = c ;
    
while ( (c =getchar())!= ' ')
    b[
++lb] = c ;
    
    
for(i=1 ; i<=la ; i++)
    
{
            
for(j=1,k=i; j<= lb && (b[j] == a[k]) ; j++,k++) ;
            
if ( j > lb )
            
break ;
    }

    
    
if ( j > lb)
    printf(
"No.%d ",i);
    
else
    printf(
"No Soulation!!! ");
             
            
    
    system(
"pause");   
    
return 0 ;
}


/*
No.2  O(a+b) 的算法:该算法是由knuth 等三个人想出来的,简称为:KMP 算法
基本思想是:
一般的算法为什么这么低效呢?那是因为主串指针回溯情况过多:
主串指针如果不回溯的话,速度就会加快,那我们就会想:
如何让主串指针不回溯?
KMP算法就是解决了这个问题,所以速度变得更快速了
它是这样子的:
用一个数组:next[] 求得失配时的位置,然后保存下来,具体请看如下程序:

*/

*/

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

#define MAX 101


void get_next( int *next,char *a,int la) /*求NEXT[]的值*/
{
     
int i=1,j=0 ;
     next[
1] = 0 ;
     
     
while ( i <= la) /*核心部分*/
     
{
           
if( a[i] == a[j] || j == 0 )
           
{
               j 
++ ;
               i 
++ ;
               
if( a[i] == a[j])
               next[i] 
= next[j];
               
else
               next[i] 
= j ;
           }

           
else
           j 
= next[j] ;
     }

}


int  str_kmp( int *next, char *A ,char *a, int lA,int la)/* EASY*/
{
     
int i,j,k ;
     i 
= 1 ;
     j 
= 1 ;
     
while ( i<=lA && j <= la )
     
{
           
if(A[i] == a[j] ||  j == 0 )
           
{
                   i 
++ ;
                   j 
++ ;
           }

           
else
           j 
= next[j] ;
     }

     
     
if ( j> la)
     
return i-j+1 ;
     
else
     
return -1 ;
}


int main(void)
{
    
int n,k;
    
int next[MAX]={0} ;
    
int lA=0,la =0 ;
    
char A[MAX],a[MAX] ;
    scanf(
"%s %s",A,a) ;
    
    lA 
= strlen(A);
    la 
= strlen(a);
    
for(k=la-1; k>= 0 ;k --)
    a[k
+1] = a[k] ;
    
for(k=lA-1; k>= 0 ;k --)
    A[k
+1] = A[k] ;
    
    get_next(next,a,la) ;
    k 
= str_kmp(next,A,a,lA,la);
    
if ( -1 == k)
    printf(
"Not Soulation!!! ");
    
else
    printf(
"%d ",k) ;
    system(
"pause");
    
    
return 0 ;
}


 
本地部署 Anything LLM+Ollama+DeepSeek R1 大模型并实现外部访问 DeepSeek 一经发布就引起社会的广泛的关注,因为 DeepSeek 的价格低廉,性能卓越,提供了多种使用方式,满足不同用户的需求和场景。本文将详细的介绍如何在本地 Windows 上安装部署 Anything LLM + Ollama 来实现用户和 DeepSeek-r1 对话的功能以及利用路由侠内网穿透实现外网访问。 阅读详情

相关推荐

【electron】- 从零到一:在electron-vite项目中集成better-sqlite3的工程化实践

本文详细介绍了在electron-vite项目中集成better-sqlite3数据库的完整工程化实践。针对原生模块的编译挑战,提供了从环境配置、路径规划、服务封装到IPC通信的解决方案,并重点解决了开发与生产环境的数据库路径分离及打包部署等核心问题,帮助开发者构建稳定高效的Electron桌面应用数据层。

weixin_29306571的博客 202

C语言实现字符串匹配KMP算法

相信很多人(包括自己)初识KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也。 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 下面的的KM

轻锋的专栏 7855

ORBSLAM3运行记录(单目+IMU)

ORBSLAM3运行记录1.单目+IMU数据集运行记录自己做的其它测试2.单目+IMU自己采集数据运行记录测试结果 1.单目+IMU数据集运行记录 ORBSLAM3没有预留ROS下单目+IMU的结点,这个需要自己去写代码添加,可以参考这篇博客,《ORBSLAM3 用ROS接口运行双目IMU和单目IMU模式》。我的ROS结点为Mono-IMU,字典文件ORBvoc.txt在ORBSLAM3 / Vocabulary文件夹中,配置文件EuRoC.yaml在ORB_SLAM3 / Examples / Monoc

yys2324826380的博客 1万+

字符串匹配算法KMP原理详解及C++实现

问题介绍 KMP算法是用来解决字符串匹配算法的。例如给定一个主串T,判断其中是否出现了模式串P,即P是否为T的子串。例如:主串T为“hello”,模式串P为“el”,那么P就是T的子串;若模式串P为“elo”,那么P就不是T的子串。 暴力法解决字符串匹配 思路很简单。从主串的首字符开始匹配,如果匹配失败,则从主串的第2个字符开始匹配,以此类推。由于思路简单,直接上代码。 ...

bqw的博客 4482

RPMsg:协议简介

两台计算机可以通过TCP/IP进行通信,那么同一颗芯片上的两个核心怎么通信呢?

SunnyZhou-1024的博客 1万+

lgv20刷twrp_LG港版v20 root

这是LG港版v20 root,整理了一下有关LG港版v20的官方固件包了,有没有需要的呢,这里把固件包整理一下也是方便大家以后好下载了,因此有一些机友还是不知道在哪里下载官方的rom包,在这里说的固件rom包也就是原版的系统包了,大家可以放心的使用,这些系统包也都是支持线刷的,大家下载下来解压出来根据里面的相关教程来操作就可以了,很简单的,如果你也需要的话就一起来看看吧。软件提示注意!! 此过程会...

weixin_33212263的博客 5387

C语言实现字符串的模式匹配

本文主要是基于我刚来优快云平台发布的关于KMP匹配算法的问答进行学习总结,用C语言实现暴力匹配算法和KMP模式匹配算法!

墨城烟柳ベ旧人殇的博客 5557

SAP RAP 校验全流程:从 EML 读取到消息上屏与阻止落库

本文系统梳理了 SAP ABAP RAP 中的校验流程(The Validation Process),结合 Airline/Connection 案例,详细讲解了三类核心校验:语义键唯一性、外键有效性和字段间一致性。文章覆盖了 EML 的 READ ENTITIES 操作、reported-* 与 failed-* 结构的使用方法、消息创建与字段绑定技巧,以及处理草稿数据时的 UNION 查询策略。通过代码示例演示了如何实现校验逻辑、生成错误消息并阻止无效数据持久化,同时提供了常见问题的排查建议。全文注重

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 331

字符串匹配算法(C语言实现)

字符匹配算法(BF算法与KMP算法)的基本理解

qq_53822523的博客 1万+

uniapp - 实现集成调用zebra斑马打印机+打印标签+打印二维码详细实例代码,通过蓝牙连接打印机打印与通过打印机IP和端口两种方式适配斑马打印机(全平台兼容H5、微信小程序、苹果安卓App)

uniapp适配斑马打印机 实现标签打印,uniapp适配斑马打印机实现标签打印,uniapp调用zebra斑马打印机打印标签,uniApp连接传统蓝牙的斑马打印机打印,实现标签打印功能uniapp 蓝牙连接斑马打印机发送zpl指令打印,适配斑马(Zebra)牌打印机,小程序调用蓝牙打印机完整代码,uniapp 打印机wifi链接 蓝牙链接,uniapp斑马打印机,实现二维码标签展示以及打印,APP端连接打印机打印小票和标签,uniapp使用斑马打印中文不出来,打印机连接不上,打印没反应怎么办,打印报错,斑

🏆 前端领域优质创作者 1万+

基于深度学习 YOLOv11 的快递包裹检测系统(Python + PySide6 界面 + 训练代码)

成为亟需优化的重要环节。随着电子商务的快速发展,物流行业面临着越来越大的压力,为了解决这些问题,我们提出了一种。目标检测算法,实现快递包裹的。的界面,供用户进行实时监控。本项目的主要目标是利用。

斌擎科技 762

KMP算法(C语言实现)

KMP算法思路

编程SHARE的博客 1万+

【华为OD机试】真题-小明减肥(Java)

摘要:题目要求从n个可选运动中选取k个,使其卡路里总和等于目标值t,统计可行方案数。输入包含运动数量n、目标t、选择数量k及卡路里数组。采用DFS回溯算法,通过剪枝优化(提前终止无效分支),分别处理选择/不选当前运动的情况。当遍历完所有运动且满足条件时计数。示例输入"4 3 2"和"1 2 3"时,输出2(对应两种选择组合)。Java实现通过递归完成搜索,最终输出符合条件的方案总数。(149字)

u014481728的博客 282

c语言字符串匹配问题,KMP字符串匹配算法C语言实现

#i nclude #i nclude #i nclude #i nclude //获得prefix数组int* GetPrefixValue(char* strPattern, int iPatternLen){int i, j; /* i runs through the string, j counts the hits*/int* prefix = (int*)malloc(iPatter...

weixin_35700754的博客 149

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

KMP算法(详解+图解 BF算法 next数组的优化问题 字符串匹配问题 c语言实现)

字符串匹配问题,KMP算法、暴力求解法 strstr函数的模拟实现 next数组的优化问题

日向晚,声声慢的博客 2371

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C语言指针实现字符定位,C语言数据结构之模式匹配字符串定位问题 主要实现了三种字符串的模式匹配,主要包括字符串子操作的集合,字符串指针回溯,和KMP算法 头文件 #ifn...

C语言数据结构之模式匹配字符串定位问题主要实现了三种字符串的模式匹配,主要包括字符串子操作的集合,字符串指针回溯,和KMP算法头文件#ifndef INDEXHEAD_H_INCLUDED#define INDEXHEAD_H_INCLUDED#include #include #include #define MAXLEN 255typedef char Sstring[MAXLEN + 1] ...

weixin_39835158的博客 197

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

设计程序,利用KMP算法实现密码锁中的虚位密码的判定

设计程序,利用KMP算法实现密码锁中的虚位密码的判定

今天也要加油呀ʕ ᵔᴥᵔ ʔ 432

KMP算法的理解,伪代码,c代码实现

1、字符串问题形式化定义:假设文本是一个长度为n的T[1..n],而模式是一个长度为m的数组P[1..m],其中m 2、方法:首先基于模式进行预处理,然后找到所有有效偏移(匹配)。 几种方法的预处理时间和匹配时间 朴素算法                        0                        O((n-m+1)*m) Rabin-Karp             

jiangbianxiumu的专栏 2049

基于C语言的字符串匹配算法(KMP匹配算法)(包含完整代码)

KMP算法是暴力匹配算法的改进,相比于暴力匹配,KMP的主串指针不回溯,从而降低了时间复杂度.

weixin_43369883的博客 655

算法训练:重复的子字符串(KMP)java

问题描述 在用KMP算法实现该问题前先说明以下什么是KMP算法,以及KMP算法的常规实现是怎样的。 KMP算法: 首先先看一组例子,上面为主串,下面为模式串 由图中可以看到,模式串的前五个字符和主串的前五个字符是相同的,即匹配的,而第六个开始,主串与模式串的字符开始不同。那么这个时候,开始看模式串前五位中的最大公共前缀是啥,如下图所示: 这个时候我们可以发现,模式串中最长的可以与主串相匹配的子串为GTG,因此接下来,我们可以移动模式串,将模式串中匹配的最大前缀子串向右移动,移到和主串中的三个相互匹配

weixin_45394002的博客 701

数据结构与算法系列之kmp算法

kmp算法

zjy521_的博客 1828

神奇的算法:KMP Knuth Morris Pratt 算法

精华在于发现不匹配时向后移动的

李勇的专栏 1004

linux c 字符串匹配,使用C语言解决字符串匹配问题的方法

最常想到的方法是使用KMP字符串匹配算法:#include #include #include int get_nextval(char *pattern, int next[]){//get the next value of the patternint i = 0, j = -1;next[0] = -1;int patlen = strlen(pattern);while ( i <...

weixin_42221297的博客 620

KMP算法的具体实现

我打算重新开始学习数据结构C语言版。今天看到的KMP算法。硬是把我绕进去了。主要是书上给的代码短小精悍,硬是看不懂怎么回事。KMP算法的主要思想是即是利用部分匹配的思想,当匹配不同的时候,两个指针不用回溯到初始位置,对于主串中的指针就是不用回溯到开始匹配模式串的位置,对于模式串的指针就是不用回到模式串的头位置。主串中的指针无需回溯,而模式串中的指针则是根据相应next函数值,回溯到某个位置即可,这样

xx 1170

字符串hash kmp算法

#include unsigned int BKDRHash(char* str){//字符串hash unsigned int seed = 131;// 31 131 1313 13131 131313 etc.. unsigned int hash = 0; w

bazingaz的专栏 492

【课程设计】C语言 数据结构课程设计 字符串的模式匹配(KMP算法与朴素算法对比)

C语言 数据结构课程设计 字符串的模式匹配(KMP算法与朴素算法对比)前言一、朴素算法1.流程图2.测试结果3.代码二、KMP算法1.流程图2.测试结果3.核心代码三、打包程序和报告下载 前言 问题描述 在事务处理程序中,顾客的姓名、货物的产地等一般都是作为字符串处理的。对于这些关键词的查询也就是在主串中寻找子串的过程,即为模式匹配。 基本需求 (1)输入多条主串,及一条子串。 (2)对于多条主串进行模式匹配,如果匹配成功则返回主串内容及子串在主串中的位置。如果匹配失败,则返回0。 (3)分别用朴素的模.

Maoziii的博客 1119
上一篇: 洗牌问题(多种解法以高效解法)
oopos
博客等级 码龄19年 21粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值