从主串的第pos个位置开始和模式串的第一个字符进行比较,若相等,则继续比较后续字符,直到模式串的末尾,否则从主串的下一个字符再重新和模式串相比较。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#define Max 255
using namespace std;
typedef struct
{
char ch[100]; //储存字符串
int length; //字符串的长度
} SString;
int Index(SString S,SString T,int pos)
{
int i, j;
i=pos;
j=0;
while(i <= S.length && j <= T.length)
{
if(S.ch[i]==T.ch[j])
{
++i;
++j;
if(j>=T.length) return i-T.length +1 ;
}
else
{
i=i-j+1;
j=0;
}
//printf("%d %d\n", i, j);
}
return 0;
}
int main()
{
int pos;
SString S, T;
scanf("%d",&S.length);
scanf("%s", S.ch);
scanf("%d",&T.length);
scanf("%s", T.ch);
pos = Index(S, T, 0);
if(pos == 0) printf("装逼失败\n");
else
printf("装逼成功 Pos:%d",pos);
return 0;
}