朴素的模式匹配算法

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


 执行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值