朴素的模式匹配算法

问题描述:如果串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("匹配失败");
}

 

  

 

posted on 2013-05-30 22:36  静寂木  阅读(242)  评论(3)    收藏  举报