模式匹配bf算法c语言代码
时间: 2024-10-24 13:01:19 浏览: 52
模式匹配(如KMP算法、Boyer-Moore算法等)是一种字符串搜索算法,用于查找文本中是否存在给定的模式串。在这里,我将以 Boyer-Moore 算法为例,给出一个简单的 C 语言代码实现。Boyer-Moore 算法利用了坏字符规则和好后缀规则,提高了查找效率。
```c
#include <stdio.h>
#include <string.h>
void bad_char表构建(char pattern[], int lps[]) {
int i = 0, j;
while (i < lps.length) {
if (pattern[i] == pattern[j])
i++, j++;
else {
if (j != 0)
j = lps[j - 1];
else
i++;
}
lps[i] = j;
}
}
void boyer_moore_search(char text[], char pattern[]) {
int m = strlen(pattern);
int n = strlen(text);
int lps[m]; // 记录最长公共前后缀长度
bad_char表构建(pattern, lps);
int i = 0; // 指向text
while (i <= n - m) {
// 如果当前位置匹配
if (text[i + m - 1] == pattern[m - 1]) {
int j;
for (j = m - 1; j >= 0 && pattern[j] == text[i + j]; j--)
;
if (j == 0)
printf("Pattern found at index %d\n", i);
i += lps[j]; // 使用lps数组跳跃
} else {
// 如果不匹配,使用bad_char规则找到合适的跳过距离
int skip = m - 1;
while (skip > 0 && pattern[skip] != text[i + skip])
skip = lps[skip];
if (skip == 0)
i++;
else
i += skip;
}
}
}
int main() {
char text[] = "ABABCABABC";
char pattern[] = "ABC";
boyer_moore_search(text, pattern);
return 0;
}
```
阅读全文