用C语言实现用bf算法匹配下列模式串在主串中的位置并输出 主串S=“ababcabcacbab”. 模式串T=“abcac
时间: 2024-12-13 16:20:51 浏览: 9
BF(Boyer-Moore Hunt)算法是一种常用的字符串搜索算法,它利用了信息熵的概念来预处理模式串,加快搜索速度。用C语言实现BF算法需要以下几个步骤:
1. 预处理模式串T:创建两个长度为T长度的数组,h[0..m-1]存储最长后缀和前缀公共部分的长度,lps[]存储最长公共前后缀子串的位置。
2. 定义函数:
- `lps()` 函数计算lps数组。
- `search(S, m, T)` 函数实际执行搜索,输入为主串S、模式串T的长度m。
```c
#include <stdio.h>
#include <string.h>
int lps(char* pattern, int m) {
int l = 0, i;
for (i = 1; i < m; ++i) {
if (pattern[i] == pattern[l])
l++;
else if (l > 0)
l = lps(pattern, l);
else
l = 0;
lps[i] = l;
}
return l;
}
int search(char* text, char* pattern, int m, int n) {
int i = 0, j = 0;
while (i < n && j < m) {
if (text[i] == pattern[j]) {
i++, j++;
} else {
if (j != 0)
j = lps[pattern, j];
else
i++;
}
}
if (j == m)
printf("Pattern found at index %d\n", i - j);
else
printf("Pattern not found.\n");
return i;
}
int main() {
const char* S = "ababcabcacbab";
const char* T = "abcac";
int m = strlen(T), n = strlen(S);
int lps_m = lps(T, m);
search(S, T, m, n);
return 0;
}
```
当你运行这个程序,它会在给定的主串S中查找模式串T的位置,并输出结果。如果找到匹配,将显示匹配的起始索引;如果没有找到,则输出"Pattern not found."。
阅读全文