#include<stdio.h>
#include<string.h>
int BF(char* str1, char* str2, int length1, int length2, int pos);
int main()
{
char* a = "abcdffllkh";
char* b = "fl";
int n = 0, m = 0;
int k = 0;
n = strlen(a);//求a的长度
m = strlen(b);//求b的长度
k = BF(a, b, n, m, 1);
printf("%d\n", k);
getchar();
return 0;
}
/*
*字符串模式匹配算法
*str1为主串,str2为子串
*length1为主串长度,length2为子串长度,
*/
int BF(char* str1, char* str2, int length1, int length2, int pos)
{
int i = pos, j = 1;
while (i <= length1 && j <= length2)//在主串和子串的有效长度范围内进行比较
{
if (str1[i-1]==str2[j-1])//从第一个字符开始比较,相等则主串和子串就比较下一个字符
{
i++;
j++;
}
else//如果不等,子串则从头开始,即j=1,这里关键是找出不等时,i和j的关系(i=i-j+2)
{
i = i - j + 2;//利用指针回溯,即第一次比较的下一个位置开始比较
j = 1;
}
}
if (j > length2)
{
return i - length2; //返回子串在主串中第一次出现的位置,即i-length2
}
return 0;
}
字符串模式匹配算法-BF算法
最新推荐文章于 2022-01-16 20:38:16 发布