全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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小时内与您取得联系。