使用C语言写一个基于Boyer-Moore算法字符串匹配查找函数
时间: 2024-11-27 13:12:51 浏览: 56
Boyer-Moore算法是一种高效的字符串搜索算法,它通过预计算模式串的后缀数组(bad character rule)和最长公共前后缀长度(good suffix rule)来避免无效的字符比较。以下是使用C语言编写的一个简化版Boyer-Moore算法的示例:
```c
#include <stdio.h>
#include <string.h>
// 基于Boyer-Moore算法的字符串查找函数
int boyer_moore_search(char* text, char* pattern) {
int n = strlen(text);
int m = strlen(pattern);
// 后缀数组初始化
int bad_char[] = {0};
for (int i = 1; i < m; ++i) {
while (pattern[i] != pattern[m - i]) {
if (pattern[m - i] == text[n - i])
break;
--n;
}
bad_char[i] = n - i;
}
// 跳过已经匹配的部分
int i = m - 1, j = n - 1;
while (i > 0 && j >= 0) {
if (text[j] == pattern[i]) {
--i;
--j;
} else {
int shift = m - 1 - i + bad_char[i];
i += shift;
}
}
if (i == 0)
return j + 1; // 找到位置
return -1; // 没有找到
}
int main() {
char text[] = "ABABCABAB";
char pattern[] = "BAB";
printf("Pattern found at position: %d\n", boyer_moore_search(text, pattern));
return 0;
}
```
注意:这是一个基础版本的Boyer-Moore算法,实际应用中可能需要处理更多边界情况和优化细节。
阅读全文