如何比较两个C语言字符串的相似性

发布时间:2024-08-30 12:37:52 作者:小樊
来源:亿速云 阅读:89

要比较两个C语言字符串的相似性,可以使用一种称为“编辑距离”(Edit Distance)的算法

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

int min(int a, int b) {
    return (a < b) ? a : b;
}

int edit_distance(const char *str1, const char *str2) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    
    int **dp = (int **)malloc((len1 + 1) * sizeof(int *));
    for (int i = 0; i <= len1; i++) {
        dp[i] = (int *)malloc((len2 + 1) * sizeof(int));
    }

    for (int i = 0; i <= len1; i++) {
        dp[i][0] = i;
    }
    for (int j = 0; j <= len2; j++) {
        dp[0][j] = j;
    }

    for (int i = 1; i <= len1; i++) {
        for (int j = 1; j <= len2; j++) {
            if (str1[i - 1] == str2[j - 1]) {
                dp[i][j] = dp[i - 1][j - 1];
            } else {
                dp[i][j] = 1 + min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]);
            }
        }
    }

    int distance = dp[len1][len2];

    for (int i = 0; i <= len1; i++) {
        free(dp[i]);
    }
    free(dp);

    return distance;
}

int main() {
    const char *str1 = "kitten";
    const char *str2 = "sitting";

    printf("Edit distance between '%s' and '%s': %d\n", str1, str2, edit_distance(str1, str2));

    return 0;
}

这个程序首先计算输入字符串的长度,并分配一个动态二维数组来存储中间结果。接下来,它初始化第一行和第一列的值,然后遍历每个字符,计算编辑距离。最后,返回dp[len1][len2]作为结果,并释放分配的内存。

在这个例子中,我们计算了字符串 “kitten” 和 “sitting” 之间的编辑距离。运行此程序将输出:

Edit distance between 'kitten' and 'sitting': 3

这意味着只需要3次操作(插入、删除或替换)就可以将一个字符串转换为另一个字符串。

推荐阅读:
  1. C语言中怎么使用泛型达到代码重用的目的
  2. C语言中匿名方法有什么作用

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

c语言

上一篇:C语言字符串处理中的内存管理策略

下一篇:C语言字符串替换特定字符的技术

相关阅读

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

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