温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言字符串中的Boyer-Moore算法

发布时间:2024-08-30 09:49:46 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

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。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI