#include <iostream>
using namespace std;
void get_next(char *c,int *i);
int Index_KMP(char* s,char* T,int pos);
int main()
{
 char c[100],d[100];
 int b[100];
 scanf("%s %s",c,d);
 int i,j;
 i=Index_KMP(c,d,1);
 printf("i=%d\n",i);
 return 0;
}
void get_next(char *c,int *next)
{
 int i,len,j;
 next[0]=-1;
 i=0;
 j=-1;
 len=strlen(c);
 while(i<len-1)
 {
  if(j==-1||c[i]==c[j])
  {
   i++;
   j++;
   next[i]=j;
  }
  else j=next[j];
 }
}
int Index_KMP(char* s,char* T,int pos)
{
 int j=0,i=0,*p;
 p=new int[strlen(T)];
 get_next(T,p);
 j=0;
 while((j!=strlen(T))&&(i!=strlen(s)))
 //while((j<strlen(T))&&(i<strlen(s)))
 {
  if(j==-1)
  {
   i++;
   j++;
  }
  else if(T[j]==s[i])
  {
   i++;
   j++;
  }
  else
   j=p[j];
 }
 if(j==strlen(T))
  return i-strlen(T)+1;
 return -1;
}
为什么用第二个while 会发生错误啊 希望有人可以看看



											
	    

	