简单实现朴素模式匹配
输入示例:
正文T:a a b c b a b c a a b c a a b a b c
模式P:a b c a a b a b c
源代码:
#include
#include
#define maxsize 18
typedef struct
{
char p[maxsize];
int length;
} modep;
void init(modep *p,modep *t)
{
p->length=0;
t->length=0;
}
void input(modep *a)
{
char i;
int j=0;
//printf("Input");
/*
do{
scanf("%c",&i);
a->p[j]=i;
a->length++;
j++;
}while(i!='-1');
a->p[j]='\0';
*/
gets(a);
a->length=strlen(a);
}
void print(modep a){
int i;
for(i=0;i<=a.length;i++){
printf("%c",a.p[i]);
}
}
int index(modep p,modep t){
int i,j,sign;
i=0;
sign=0;
while((i<=t.length-p.length)&&sign==0){
j=0;
sign=1;
while((j<=p.length-1)&&sign!=0){
if(p.p[j]==t.p[i+j]) j++;
else
sign=0;
++i;
}
}
if(sign!=0)return(i-1);
else return (-1);
}
int main()
{
modep P,T;
int sign=0;
init(&P,&T);
printf("请输入正文T\n");
input(&T);
printf("请输入模式P\n");
input(&P);
printf("正文T为:\n");
print(T);
printf("模式P为:\n");
print(P);
sign=index(T,P);
if(sign!=-1)
{
printf("匹配失败");
}
else
printf("匹配成功");
return 0;
}