栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

串的模式匹配问题:朴素算法与KMP算法

#include
#include
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(iT[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("nn你调用了功能1:");
    printf("n朴素的模式匹配算法");
    k=Index(A,B,j);
    printf("n该位置为:");
    printf("%dn",k);
    break;}     
case 2:
    {printf("nn你调用了功能2:");
printf("n 快速模式匹配算法");
a=Index_KMP(A,B,j);
printf("n该位置为:");
printf("%dn",a);
break;}
case 3:
    {printf("nn你调用了功能3:");
printf("n退出n");
}
    }
}while(id!=3);
#include
#include
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(iT[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("nn你调用了功能1:");
    printf("n朴素的模式匹配算法");
    k=Index(A,B,j);
    printf("n该位置为:");
    printf("%dn",k);
    break;}     
case 2:
    {printf("nn你调用了功能2:");
printf("n 快速模式匹配算法");
a=Index_KMP(A,B,j);
printf("n该位置为:");
printf("%dn",a);
break;}
case 3:
    {printf("nn你调用了功能3:");
printf("n退出n");
}
    }
}while(id!=3);
 
}

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/63679.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号