KMP算法...老是怕自己忘记了
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char s[100],s1[100];
int next[100];
void getnext()
{
int i=0,j=-1;
next[0]=-1;
while (i<strlen(s1))
{
if (s1[i]==s1[j] || j==-1)
next[++i]=++j;
else
j=next[j];
}
}
int main()
{
int T,i,j;
scanf("%d",&T);
while (T--)
{
memset(next,-1,sizeof(next));
scanf("%s",&s);
getchar();
scanf("%s",&s1);
getnext();
j=0;
i=0;
int l=strlen(s);
int l1=strlen(s1);
while (i<l && j<l1)
{
if (s[i]==s1[j] || j==-1)
{
j++;
i++;
}
else j=next[j];
}
if (j>=strlen(s1))
{
printf("%d\n",i-j);
}
else
cout<<"NO!"<<endl;
}
system("pause");
}