朴素的模式匹配算法
问题描述:如果串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("匹配失败"); }