C语言字符串中的Rabin-Karp算法

发布时间:2024-08-30 09:51:45 作者:小樊
来源:亿速云 阅读:81

Rabin-Karp算法是一种字符串匹配算法,用于在文本中查找模式字符串

以下是使用Rabin-Karp算法在C语言中实现字符串匹配的示例:

#include<stdio.h>
#include<string.h>
#include <stdlib.h>

#define PRIME 101
#define D 256

// 计算字符串的哈希值
unsigned long hash(const char *str, int len) {
    unsigned long h = 0;
    for (int i = 0; i < len; ++i) {
        h = (D * h + str[i]) % PRIME;
    }
    return h;
}

// Rabin-Karp算法实现
void rabin_karp(const char *text, const char *pattern) {
    int text_len = strlen(text);
    int pattern_len = strlen(pattern);

    // 计算模式字符串的哈希值
    unsigned long pattern_hash = hash(pattern, pattern_len);

    // 遍历文本字符串
    for (int i = 0; i <= text_len - pattern_len; ++i) {
        // 计算子字符串的哈希值
        unsigned long sub_hash = hash(text + i, pattern_len);

        // 如果哈希值相等,则比较子字符串和模式字符串是否相等
        if (sub_hash == pattern_hash && strncmp(text + i, pattern, pattern_len) == 0) {
            printf("Pattern found at position: %d\n", i);
        }
    }
}

int main() {
    const char *text = "This is a test string for Rabin-Karp algorithm.";
    const char *pattern = "Rabin";

    rabin_karp(text, pattern);

    return 0;
}

这个示例中,我们首先定义了两个辅助函数hash()rabin_karp()hash()函数用于计算字符串的哈希值,而rabin_karp()函数实现了Rabin-Karp算法。在main()函数中,我们调用rabin_karp()函数来查找模式字符串在文本中的位置。

推荐阅读:
  1. C语言如何输入一个字符,判断出是字母,数字还是特殊字符
  2. C语言输入十个数输出最大值的简单方法介绍

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

c语言

上一篇:C语言字符串中的Boyer-Moore算法

下一篇:C语言字符串中的Manacher算法

相关阅读

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

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