您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
Boyer-Moore算法是一种高效的字符串匹配算法,它在文本中搜索模式串(pattern)并返回匹配的位置
以下是一个简单的C语言实现Boyer-Moore算法的示例:
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
// 计算跳跃表
void build_skip_table(const char *pattern, int pattern_len, int skip_table[]) {
for (int i = 0; i < 256; i++) {
skip_table[i] = pattern_len;
}
for (int i = 0; i< pattern_len - 1; i++) {
skip_table[(unsigned char)pattern[i]] = pattern_len - i - 1;
}
}
// Boyer-Moore算法
int boyer_moore_search(const char *text, const char *pattern) {
int text_len = strlen(text);
int pattern_len = strlen(pattern);
if (pattern_len == 0) {
return 0;
}
int skip_table[256];
build_skip_table(pattern, pattern_len, skip_table);
int k = pattern_len - 1;
while (k< text_len) {
int j = pattern_len - 1;
while (j >= 0 && text[k] == pattern[j]) {
k--;
j--;
}
if (j < 0) {
return k + 1;
}
k += skip_table[(unsigned char)text[k]];
}
return -1;
}
int main() {
const char *text = "This is a simple text to search the pattern in.";
const char *pattern = "pattern";
int position = boyer_moore_search(text, pattern);
if (position != -1) {
printf("Pattern found at position: %d\n", position);
} else {
printf("Pattern not found.\n");
}
return 0;
}
这个示例中,boyer_moore_search
函数接受两个参数:要搜索的文本和要查找的模式串。build_skip_table
函数用于构建跳跃表,它存储了每个字符在模式串中最后出现的位置。然后,我们遍历文本并使用跳跃表进行快速匹配。如果找到匹配的位置,函数返回该位置的索引;否则,返回-1。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。