字符串相似度的计算

本文介绍了一种计算字符串相似度的方法,通过A、B、C三个参数表示共性字符、独有字符和缺失字符的数量。作者分享了解决此类问题的固定步骤模板,包括输入处理、函数实现和主函数调用,对于提高代码能力特别是应对考试很有帮助。
摘要由CSDN通过智能技术生成
话不多说,先看题目!
2. 字符串相似度计算
【向题描述】
字符串的相似度计算是自然语言处理中常用的方法,给定两个字符串 S1 S2, 不超过 20
字符 ( 字符串中不出现空格 ) ,其相似度的计算方法为 :S=A/(A+B+C) ,其中, A 是两个字符串中
都存在的字符介数 ( 重复出现的字符,只算一次 ) B S1 中有,但是 S2 中没有的字符个数 :C
S2 中有,但是 S1 中设有的字符个数。
【输入形式】
第一行输入第一个字符 S1( 不超过 20)
第一行输入第一个字符 S2( 不超过 20)
【输出形式】
两个字待串的相似度 ( 保留小数点后 2)—“ 样例输入
【样例输出】
Hellowwuhan
Hellowwtu
【样例说明】
两个字符串中都有的字符是 H,e 1 o w,u ,其中 1 w 都出现了两次,只算一次。所以,
两个字符串同时出现个数为
6 ,即 A 6 S1 中的 h,a n S2 中未出现, B=3;S2 中的在 S1 中未出现, C=1
7 ,所以 S=6/ (6+3+1)=0.6
家人们,由于我下下周就要参加复试了,代码能力很菜,我就在csdn上写一下我的思路,在我眼中我感觉只要是考试都是有套路的,所以我自己总结了一套模板来解这些题,当然,这只适用于我这种菜狗,如果你是大神的话,就不用看了。
由于我们的代码部分是按照步骤给分,所以我总结了一套万能模板,来确保如何在不会的情况下也能把代码写出来。话不多说,直接放干货
第一步:输入头文件,如果不知道用哪些头文件的话,就把你感觉能用到的都写进去

#include <stdio.h>//stdio.h 是用于输入输出操作的头文件
#include <string.h>//string.h 是用于字符串操作的头文件

第二步:定义函数来实现主要功能,函数部分一般涉及到的是一个for循环里面嵌套if条件语句

1.判空 2.for循环 3.if条件语句进行判断

float calc_similarity(char* s1, char* s2) {//定义函数 calc_similarity,用于计算两个字符串的相似度
    int len1 = strlen(s1);//使用 strlen 函数获取两个字符串的长度'
    int len2 = strlen(s2);
    int max_len = (len1 > len2) ? len1 : len2;//通过比较得到较长字符串的长度作为 max_len
    int same_count = 0;

    for (int i = 0; i < max_len; i++) {//使用一个循环遍历两个字符串的每个字符
        if (i >= len1 || i >= len2) {//如果遍历到的索引超过了任意一个字符串的长度,就退出循环
            break;
        }
        if (s1[i] == s2[i]) {//如果当前字符相等,则增加 same_count 的计数
            same_count++;
        }
    }

    return (float)same_count / (float)max_len;//得出两个字符串的相似度,并以float类型输出 
}

第三步:写main函数,调用函数来实现该功能 

这里面主要包含四个步骤 1.定义存储位置 2.输入并接受字符串 3.调用函数相关功能 4.输出结果

int main() {
    char s1[100], s2[100];//负责用户输入和输出
    printf("请输入第一个字符串:");//输入第一个字符串
    scanf("%s", s1);//读取用户输入的字符串并存储到 s1 中
    printf("请输入第二个字符串:");
    scanf("%s", s2);

    float similarity = calc_similarity(s1, s2);//计算两个字符串的相似度,并将结果存储到变量 similarity 中
    printf("两个字符串的相似度为:%.2f\n", similarity);//输出计算得到的相似度

    return 0;
}

这其中的话第一步和第三步的答案是固定的,不同的是第二步,但是第二步的话也可以有固定的,我发现大部分的字符串题目都涉及到三步走:1.判空 2.for循环 3.if条件语句进行判断  ,所以如果第二步不会了也可以向这方面进行靠拢着写,最最重要的是一定要多写注释,因为我们上机的话如果没有完全运行出结果的话老师会按照你的步骤进行得分!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值