思想:
逐个比较。
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
typedef struct {
char str[Maxsize];
int size;
}seqlist;
void init(seqlist *p)
{
p->size=0;
}
void creat(seqlist *p)
{
int i=0;
char ch;
while((ch=getchar())!='\n')
{
p->str[i++]=ch;
p->size++;
}
}
int PS(seqlist t,seqlist p)
{
int i=0,j=0,k=0; // i是用来检索主文本,j是用来检索模式文本,k是控制循环是否进行。
while(i<=t.size-p.size && !k) // 当匹配成功时,!k的作用是退出循环。
{
j=0;k=1;
while(j<p.size && k)
{
if(t.str[i+j]==p.str[j])
j++;
else
k=0; // 当当前匹配不成功时,退出内层循环,j置为0(重新从第一个开始比较)
}
++i;
}
if (k)
return i-1;
else
return -1;
}
int main()
{
int k;
seqlist t,p;
init(&t);
init(&p);
creat(&t);
creat(&p);
k=PS(t,p);
printf("%d",k);
return 0;
}