#include<stdio.h>
#define maxsize1 10
#define maxsize2 4
/*主串移动完,匹配失败
模式串移动完,匹配成功*/
int patternmatching(int *a,int *b)//主串和模式串,返回的是模式串在主串的开头位置
{
int i,j;//定义两个变量,i用于主串的下标,j用于模式串的下标
for(i=0;i<maxsize1;i=i-j+1)
/*主串从下标0开始;
i=i-j+1:i的重置,j为模式串当前的下标,每趟匹配i和j同步移动;
i-j为重置 i为这趟匹配开始的位置;
i-j+1为往后移动一位,准备下一趟匹配*/
{
for(j=0;j<maxsize2;)//模式串的移动
{
if(a[i]!=b[j])break;//此趟出现主串和模式串的元素不匹配时,停止匹配循环,进入新的一趟匹配
else if(a[i]==b[j])//主串和模式串的元素匹配时,主串和模式串同步往后移动
{
i++;
j++;
}
}
if(j==maxsize2)//如果模式串全部移动完毕,说明模式串全部和主串的一部分匹配成功了
return (i-j);//返回此趟匹配i的初始位
}
return -1;//主串移动完毕,则匹配失败返回-1
}
void main()
{
int n;
int a[maxsize1]={0,1,2,3,4,5,6,7,8,9};
int b[maxsize2]={2,3,4,5};
n=patternmatching(a,b);//
if(n!=-1)
printf("匹配成功:%d\n",n);
else
printf("失败了!!!\n");
}