代码如下:
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int Rs; //全局变量解决PTA中scanf返回值问题
int KMP(char *String,char *Pattern);//KMP算法得出模式串在主串中位置,不 在则输出-1
void BuildMatch(char *Pattern,int * match);//记录模式串每个字符的变化值
int main()
{
char * String , * Pattern;
String=(char *)malloc(sizeof(char) * 100000);
Pattern=(char *)malloc(sizeof(char) * 100000);
Rs=scanf("%s",String);
Rs=scanf("%s",Pattern);
int P;
P=KMP(String,Pattern);
if(P<0) P=-1;
printf("\n%d",P);
return 0;
}
void BuildMatch(char *pattern,int * match)
{
int i,j;
int m=strlen(pattern);
match[0]=-1;
for(j=1;j<m;j++)
{
i=match[j-1];
while((i>=0)&&(pattern[i+1]!=pattern[j]))
i=match[i];
if(p