Поиск в строке по алгоритму Кнута - C (СИ)
Формулировка задачи:
Вот код алгоритма...компилирую на досовском BC...не могу устранить ошибки...в чем дело...прошу помощи!!
#include <stdio.h>
#include <conio.h>
#include <string.h>
int SrchKMP(char *S,char *P);
void main()
{
char S[]="iv ivanobich ivanikin";
char P[]="ivanikin";
int r;
r=SrchKMP(S,P);
if (r<0)
printf("\n podstroka \"%s\" ne naidena",P);
else
printf("\n podstroka \"%s\" naidena, pozichija i=%d",P,r);
getch();
}
/*=======================================================*/
char* SrchKMP(char *S, char *P)
{
int i,j,k,M,N;
int *d[100];
M=strlen(P); N=strlen(S);
d[0]=-1; j=0; k=-1;
while (j<(M-1))
{
while ((k>=0) && (P[j]!=P[k]))
k=d[k];
j++; k++;
if (P[j]==P[k])
d[j]=d[k];
else
d[j]=k;
}
i=0; j=0; k=0;
while ((j<M) && (i<N))
{
while (k<=i)
k++;
while ((j>=0) && (S[i]!=P[j]))
j=d[j];
i++;j++;
}
if (j==M)
return &S[i-M];
else
return NULL;
}Решение задачи: «Поиск в строке по алгоритму Кнута»
textual
Листинг программы
int SrchKMP(char *S,char *P);