本文主要是介绍朴素的模式匹配算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述:如果串s2是串s1的子串,求串s2在串s1中第一次出现的位置。
分析:用串s2的第一个字符依次从串s1的第一个字符开始比较,不等则后移一个位置。。。。
代码整理:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int index(char s1[],char s2[],int n1,int n2)
{ int i,j;i=0;j=0;while(i<n2&&j<n1) /*反复比较*/if(s2[i]==s1[j]){i++;j++;} /*继续比较下一个*/ else {j=j-i+1; /*主串、子串的i、j值回溯,重新开始下一次匹配*/i=0;}if(i>=n2)return(j-n2+1);else return 0;
}
void main()
{ char s1[]="abbaba";char s2[]="aba";int a,n1,n2;n1=strlen(s1);n2=strlen(s2);a=index("abbaba","aba",n1,n2);if(a!=0)printf("匹配成功,s[]在c[]中第一个字符序号为:%d\n",a);else printf("匹配失败");
}
执行结果:
这篇关于朴素的模式匹配算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!