Алгоритм Хорспулла на си
Нужен код алгоритма Хорспулла для подстроки на си. Код ничего не выводит, не знаю в чем проблема.
#include <stdio.h>
#include <locale.h>
int horspool(char *T, char *P) {
int n=strlen(T);
int m=strlen(P);
int slide[255];
for(int i=0;i<255;i++){
slide[i]=m;
}
for(int l=0;l<255;l++){
slide[P[l+1]]=m-1-l;
}
int i=m-1;
while (i <=(n-1)){
int k=0;
while(k<=m-1 && P[m-k]==T[i-k+1]){
k+=1;
}
if (k==m){
return i-m+1;
}
else{
i=i+slide[T[i+1]];
}
}
return -1;
}
int main(void)
{
char T;
char P;
int pos;
scanf("%s",&T);
scanf("%s",&P);
pos=horspool(T,P);
if( pos==-1){
printf("Поиск не дал результатов");
}
else{
printf("Поиск не дал результатов %d",pos);
}
system("PAUSE");
return 0;
}
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
У Вас ошибок больше чем нормального кода.
В main вводятся строки в буфер размером 1 символ.
int main(void)
{
char T; // размер - 1 символ
char P; // размер - 1 символ
scanf("%s",&T);
scanf("%s",&P);
в функции horspool - P[l+1] - строка больше 256 символов? Куда вы адресуете?
int horspool(char *T, char *P)
{ int m=strlen(P);
for(int l=0;l<255;l++)
slide[P[l+1]]=m-1-l;
Дальше и смотреть не хочется. У автора нет ни знания языка, ни знания алгоритма.