KMP基础,注意输入
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char s[],p[];
int sum,next[];
void getNext(char *p,int *next)
{
int j,k;
next[]=-;
j=,k=-;
while(j<strlen(p)-)
{
if(k==-||p[j]==p[k])
{
j++;
k++;
next[j]=k;
}
else
k=next[k];
}
}
int KMP(char *s,char *p)
{
int i,j;
i=,j=,sum=;
getNext(p,next);
while(i<strlen(s))
{
if(j==-||s[i]==p[j])
{
i++;
j++;
}
else
j=next[j];
if(j==strlen(p))
sum++;
if(i==strlen(s))
return sum;
}
} int main()
{
while(scanf("%s",s)&&strcmp(s,"#")!=)
{
scanf("%s",p);
printf("%d\n",KMP(s,p));
}