やりたいことは、入力された文字列によってスキップ表を作り、それにより文字列がある位置を表示することです。
#include<stdio.h>
#include<string.h>
void compute_g(char [],int []);
void bm(char [],char []);
void compute_h(char[]);
int max(int a, int b);
int min(int a, int b);
int main(void)
{
    char t[30];
    char p[10];
    
    strcpy(t,"ababdababccbdccabcadb");
    
    printf("テキスト:%s\n",t);
    
    printf("探したい文字列を入力してください:");
    scanf("%s",p);
    
    bm(t,p);
    
    return 0;
}
void bm(char t[],char p[])
{
    int m = strlen(p);
    int n = strlen(t);
    int i = m - 1;
    int j = m - 1;
    int flag=  0;
    int g[256];
    int h[m];
    
    compute_g(p,g);
    compute_h(p);
    
    while(i >= 0 && j < n && j >= 0){
        if(p[i] == t[j]){
            i--;
            j--;
        }else{
            j = j + max(g[(int)t[j]],h[i]);
            i = m - 1;
        }
            if(i == -1){
            printf("Pattern has found at %d.\n",j+1);
                j=j+m+1;
                i=m-1;
                flag=1;
            }
        if(flag==0){
                printf("Pattren has not found.\n");
            }
    }
}
void compute_g(char p[],int g[])
{
    int c,k;
    int m = strlen(p);
    
    for(c = 0;c <= 255;c++){
        g[c] = m-1;
    }
    for(k = 0;k <= m;k++){
        g[(int)p[k]] = m - k - 2;
    }
}
void compute_h(char p[])
{
    int m=strlen(p);
    int i,j;
    int f[m];
    int h[m];
    
    for(i=0;i<m;i++){
        h[i]=2*m-1-i;
    }
    i=m-1;
    j=m;
    f[m-1]=m;
    while(i>=0){
        if(j==m||p[i]==p[j]){
            i--;
            j--;
            f[i]=j;
        }else{
            h[j]=min(h[j],m-1-i);
            j=f[j];
        }
    }
    for(i=0;i<m;i++)
    {
        h[i]=min(h[i],m-1+j-i);
        if(i>j){
            j=f[j];
        }
    }
}
int max(int a, int b)
{
    if(a>b){
        return a;
    }else{
        return b;
    }
}
int min(int a, int b)
{
    if(a<b){
        return a;
    }else{
        return b;
    }
}
 メニュー
 メニュー カレンダー
 カレンダー Clock
 Clock 最新メンバー
 最新メンバー 投稿数
 投稿数 Link to us
 Link to us カウンター
 カウンター