Алгоритм Хорспулла на си

Нужен код алгоритма Хорспулла для подстроки на си. Код ничего не выводит, не знаю в чем проблема.

#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;

Дальше и смотреть не хочется. У автора нет ни знания языка, ни знания алгоритма.

→ Ссылка