BF算法(朴素的模式匹配算法)

#include <stdio.h>

#include <stdlib.h>



int Index_BF(char S[],char T[])//s为目标串(长串),t为模式串(可能为子串)

{

    int i = 0,j,k;

    int m = 0;

    int flag;

    int lens,lent;

    int pos[100];

    while(S[i] != '\0')

    {

        i++;

    }

    lens = i;

//    printf("字符串S的长度为:%d\n",lens);

    i = 0;

    while(T[i] != '\0')

    {

        i++;

    }

    lent = i;

//    printf("字符串T的长度为:%d\n",lent);

    for(i = 0;i < lens;i++)

    {

        k = i;//第i个字符开始

        flag = 0;

        j = 0;

        if(k > lens-lent)

        {

            break;

        }

        else

        {

            while(j < lent)

            {

                if(T[j] == S[k])

                {

                    flag++;

                }

                j++;

                k++;

            }

            if(flag == lent)

            {

                pos[m++] = i;

              //  m++;

            }

        }

    }

    if(m > 0)

    {

        printf("匹配过程完毕,串T是串S的子串: \n");

        for(i = 0;i < m;i++ )

        {

            printf("开始字符在串S中的下标为: %d \n",pos[i]);

        }

    }

    else

    {

        printf("匹配过程完毕,串T不是串S的子串: \n");

    }

    return 0;



}



int main()

{

    char S[100],T[99];

    int pos;

    printf("请输入字符串S:\n");

    scanf("%s",S);

    printf("请输入字符串T:\n");

    scanf("%s",T);

    Index_BF(S,T);

    return 0;

}

  

你可能感兴趣的:(算法)