简单的获得两个字符串相似度的代码

自己瞎想出来的,每个字符都有一个权值,字符串前面1/3的权值是3,中间1/3是2,最后1/3是1。总权值就是所有字符的权值相加。然后两个字符串从开始一个一个字符的对比,相同的就加上这个字符的权值。最后得到的权值乘以100去除总权值,得到的就是一个0-100的基本权值。

然后用:
(两个字符串长度差 * 40) div 短字符串长度
得到一个差值(如果 两个字符串长度差 > 短字符串长度 直接设差值为40)

最后 基本权值-差值 就得到相似度:

function strSimilar(str1, str2 : string):integer;
var
  rate : integer;
  len, i : integer;
  rates, tot_rates : integer;
  division : integer;
begin
  rate := 3;

  if(length(str1) > length(str2)) then
  begin
    len := length(str2)
    division := length(str1) - len;
  end
  else
  begin
    len := length(str1);
    division := length(str2) - len;
  end;
  if(division > len) then
    division = 40
  else
    division := (division * 40) div len;

  tot_rates := 0;
  rates := 0;

  for i := 1 to len do
  begin
    if(i > ((len div 3) * 2)) then
      rate := 1
    else if (i > (len div 3)) then
      rate := 2;

    tot_rates := tot_rates + rate;
    if(LowerCase(MidStr(str1,i,1)) = LowerCase(MidStr(str2,i,1))) then
      rates := rates + rate;
  end;

  result := (rates * 100) div tot_rates;
end;

这个代码还需要完善,最后需要能够根据字符串中字符差、长度差得到一个0-100的像素度值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值