自己瞎想出来的,每个字符都有一个权值,字符串前面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的像素度值。