- BF算法
1)从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符,否则从串s 的第二个字符起再重新和串t进行比较。
2)依此类推,直至串t 中的每个字符依次和串s的一个连续的字符序列相等,则称模式匹配成功,此时串t的第一个字符在串s 中的位置就是t 在s中的位置,否则模式匹配不成功。
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSTRLEN 100
typedef char SString[MAXSTRLEN + 1];
int BFindex(SString s, SString t, int pos) {
if (pos<1 || pos>s[0])
return ERROR;
int i = pos, j = 1;
while (i <= s[0] && j <= t[0]) {
if (s[i] == t[j])
i++, j++;
else
j = 1, i = i - j + 2;
}
if (j > t[0])
return i - t[0];
return ERROR;
}
int main() {
SString a = { 6,'a','b','a','d','a','b' };
SString b = { 2,'a','b' };
for (int i = 1; i <= a[0]; i++)
printf("%c ", a[i]);
printf("\n");
for (int i = 1; i <= b[0]; i++)
printf("%c ", b[i]);
printf("\n");
int pos1 = BFindex(a, b, 1);
int pos2 = BFindex(a, b, 2);
printf("%d %d\n", pos1,pos2);
return 0;
}