主题:求高手帮忙
#include<stdio.h>
#define M 255
typedef unsigned char SString[M+1];
int KMP_String(SString S,SString T);
void get_next(SString T);
void main()
{
SString S,T;
int i,j,position;
printf("请输入主串的长度:");
scanf("%d",&S[0]);
printf("请输入模式串的长度:");
scanf("%d",&T[0]);
printf("请输入主串:");
for(i=1;i<=S[0]+1;i++)
scanf("%c",&S[i]);
printf("请输入模式串:");
for(j=1;j<=T[0]+1;j++)
scanf("%c",&T[j]);
position=KMP_String(S,T);
printf("%d",position);
}
void get_next(SString T)
{
int next[M+1];
int i,j;
i=1;
j=0;
next[1]=0;
while(i<T[0])
{
if(j==0||T[i]==T[j])
{
++i;
++j;
next[i]=j;
}
else j=next[j];
}
}
int KMP_String(SString S,SString T)
{
int next[M+1];
int i,j;
i=1;
j=1;
get_next(T);
while(i<=S[0]&&j<=T[0])
{
if(j==0||S[i]==T[j]){++i;++j;}
else j=next[j];
}
if(j>T[0]) return i-T[0];
else return 0;
}
是kmp算法的实现程序,运行会出错,请高手帮忙
#define M 255
typedef unsigned char SString[M+1];
int KMP_String(SString S,SString T);
void get_next(SString T);
void main()
{
SString S,T;
int i,j,position;
printf("请输入主串的长度:");
scanf("%d",&S[0]);
printf("请输入模式串的长度:");
scanf("%d",&T[0]);
printf("请输入主串:");
for(i=1;i<=S[0]+1;i++)
scanf("%c",&S[i]);
printf("请输入模式串:");
for(j=1;j<=T[0]+1;j++)
scanf("%c",&T[j]);
position=KMP_String(S,T);
printf("%d",position);
}
void get_next(SString T)
{
int next[M+1];
int i,j;
i=1;
j=0;
next[1]=0;
while(i<T[0])
{
if(j==0||T[i]==T[j])
{
++i;
++j;
next[i]=j;
}
else j=next[j];
}
}
int KMP_String(SString S,SString T)
{
int next[M+1];
int i,j;
i=1;
j=1;
get_next(T);
while(i<=S[0]&&j<=T[0])
{
if(j==0||S[i]==T[j]){++i;++j;}
else j=next[j];
}
if(j>T[0]) return i-T[0];
else return 0;
}
是kmp算法的实现程序,运行会出错,请高手帮忙