C语言数据结构中串的模式匹配

串的模式匹配问题:朴素算法与KMP算法
#include<stdio.h>
#include<string.h>
int Index(char *S,char *T,int pos){
//返回字串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0.
//其中,T非空,1<=pos<=StrLength(s).
int i=pos;
int 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 0;
}
int get_next(char *T,int next[]){
//求模式串T的next函数值并存入数组next。
int i=1;next[1]=0;int j=0;
while(i<T[0]){
if (j==0||T[i]==T[j]){++i;++j;next[i]=j;}
else j=next[j];
}
return *next;
}
int Index_KMP(char *S,char *T,int pos){
//利用模式串T的next函数求T在主串S中第pos个字符之后的位置的KMP算法,其中T非空,1<=pos<=StrLength(S).
int next[100];
*next=get_next(T,next);
int j=1,i=pos;
while(i<=S[0]&&j<=T[0]){
if(j==0||S[i]==T[j]){++i;++j;}
else j=next[j];
}
if(j>T[0]) return i-T[0];
else return 0;
}
void main()
{
int id,j,k,i,a;
printf("输入主串、子串和匹配起始位置\n");
char A[20];char B[10];
printf("请输入主字串内容\n");
gets(A+1);
*A=strlen(A+1);
printf("请输入子字串内容\n");
gets(B+1);
*B=strlen(B+1);
printf("请输匹配起始位置\n");
scanf("%d",&j);
//printf("%d ",k);
do{
printf("\n请输入您需要的任务的序号");
printf("\n1:朴素的模式匹配算法");
printf("\n2:快速模式匹配算法");
printf("\n3:退出\n");
scanf("%d",&id);
switch(id){
case 1:
{printf("\n\n你调用了功能1:");
printf("\n朴素的模式匹配算法");
k=Index(A,B,j);
printf("\n该位置为:");
printf("%d\n",k);
break;}
case 2:
{printf("\n\n你调用了功能2:");
printf("\n 快速模式匹配算法");
a=Index_KMP(A,B,j);
printf("\n该位置为:");
printf("%d\n",a);
break;}
case 3:
{printf("\n\n你调用了功能3:");
printf("\n退出\n");
}
}
}while(id!=3);
#include<stdio.h>
#include<string.h>
int Index(char *S,char *T,int pos){
//返回字串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0.
//其中,T非空,1<=pos<=StrLength(s).
int i=pos;
int 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 0;
}
int get_next(char *T,int next[]){
//求模式串T的next函数值并存入数组next。
int i=1;next[1]=0;int j=0;
while(i<T[0]){
if (j==0||T[i]==T[j]){++i;++j;next[i]=j;}
else j=next[j];
}
return *next;
}
int Index_KMP(char *S,char *T,int pos){
//利用模式串T的next函数求T在主串S中第pos个字符之后的位置的KMP算法,其中T非空,1<=pos<=StrLength(S).
int next[100];
*next=get_next(T,next);
int j=1,i=pos;
while(i<=S[0]&&j<=T[0]){
if(j==0||S[i]==T[j]){++i;++j;}
else j=next[j];
}
if(j>T[0]) return i-T[0];
else return 0;
}
void main()
{
int id,j,k,i,a;
printf("输入主串、子串和匹配起始位置\n");
char A[20];char B[10];
printf("请输入主字串内容\n");
gets(A+1);
*A=strlen(A+1);
printf("请输入子字串内容\n");
gets(B+1);
*B=strlen(B+1);
printf("请输匹配起始位置\n");
scanf("%d",&j);
//printf("%d ",k);
do{
printf("\n请输入您需要的任务的序号");
printf("\n1:朴素的模式匹配算法");
printf("\n2:快速模式匹配算法");
printf("\n3:退出\n");
scanf("%d",&id);
switch(id){
case 1:
{printf("\n\n你调用了功能1:");
printf("\n朴素的模式匹配算法");
k=Index(A,B,j);
printf("\n该位置为:");
printf("%d\n",k);
break;}
case 2:
{printf("\n\n你调用了功能2:");
printf("\n 快速模式匹配算法");
a=Index_KMP(A,B,j);
printf("\n该位置为:");
printf("%d\n",a);
break;}
case 3:
{printf("\n\n你调用了功能3:");
printf("\n退出\n");
}
}
}while(id!=3);
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C语言数据结构中串的模式匹配
# 数据结构
# 串的模式匹配
# C语言朴素模式匹配算法实例代码
# C语言数据结构之模式匹配字符串定位问题
# C#9新特性之增强的模式匹配
# c# 使用模式匹配以及 is 和 as 运算符安全地进行强制转换
# C# 9.0 新特性之模式匹配简化的实现
# C#8 的模式匹配实现
# C#9特性record 类型、模式匹配、init 属性详情
# 请输入
# 字串
# 您需要
# 若不
# 值为
# 希望能
# 谢谢大家
# char
# pos
# int
# Index
# strong
# br
# KMP
# string
# cpp
# include
# brush
# class
相关文章:
如何获取上海专业网站定制建站电话?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何通过西部建站助手安装IIS服务器?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
,石家庄四十八中学官网?
如何快速搭建虚拟主机网站?新手必看指南
浅谈Javascript中的Label语句
小型网站建站如何选择虚拟主机?
如何选择高效稳定的ISP建站解决方案?
C++中引用和指针有什么区别?(代码说明)
PHP 500报错的快速解决方法
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
如何快速使用云服务器搭建个人网站?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
建站之星如何实现五合一智能建站与营销推广?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
建站之星安装提示数据库无法连接如何解决?
建站之星代理平台如何选择最佳方案?
建站之星代理如何优化在线客服效率?
如何基于云服务器快速搭建网站及云盘系统?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
建站之家VIP精选网站模板与SEO优化教程整合指南
建站ABC备案流程中有哪些关键注意事项?
如何快速搭建高效简练网站?
C#如何在一个XML文件中查找并替换文本内容
如何在宝塔面板中创建新站点?
深圳网站制作的公司有哪些,dido官方网站?
建站之星安装失败:服务器环境不兼容?
,柠檬视频怎样兑换vip?
如何通过PHP快速构建高效问答网站功能?
seo网站制作优化,网站SEO优化步骤有哪些?
制作网站外包平台,自动化接单网站有哪些?
如何在企业微信快速生成手机电脑官网?
C#如何使用XPathNavigator高效查询XML
如何规划企业建站流程的关键步骤?
大同网页,大同瑞慈医院官网?
如何在景安服务器上快速搭建个人网站?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何基于云服务器快速搭建个人网站?
平台云上自主建站:模板化设计与智能工具打造高效网站
建站之星代理费用多少?最新价格详情介绍
建站之星2.7模板快速切换与批量管理功能操作指南
南宁网站建设制作定制,南宁网站建设可以定制吗?
已有域名和空间如何快速搭建网站?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何在西部数码注册域名并快速搭建网站?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。