如何比较两个字符串并找出百分比上的差异

本文关键字:百分比 串并 字符 比较 何比较 两个 字符串 | 更新日期: 2023-09-27 18:16:19

我是c#新手。我有两个字符串,它们代表来自国际音标的字符。

String 1 - ðə ɻɛd fɑks ɪz hʌŋgɻi 
String 2 - ðæt ɪt foks ɪn ðʌ sʌn ɻe͡i 

现在我需要比较String 1String 2,并找出String 2String 1有多少不同。我需要这个值作为百分比值。我该怎么做呢?小代码示例将帮助我很多。非常感谢你的帮助。

如何比较两个字符串并找出百分比上的差异

你应该告诉你的字符串度量是什么

还有,看看这个如何发现两个字符串之间的差异- c#问题。

这将逐字符比较,它与Llevenshtein Distance不同,Llevenshtein Distance在比较字符串差异时更常见。

void Main()
{
    string str1 = "ðə ɻɛd fɑks ɪz hʌŋgɻi";
    string str2 = "ðæt ɪt foks ɪn ðʌ sʌn ɻe͡i";
    Console.WriteLine(StringCompare(str1,str2)); //34.6153846153846
    Console.WriteLine(StringCompare("same","same")); //100
    Console.WriteLine(StringCompare("","")); //100
    Console.WriteLine(StringCompare("","abcd")); //0  
}
static double StringCompare(string a, string b)
{
    if (a == b) //Same string, no iteration needed.
        return 100;
    if ((a.Length == 0) || (b.Length == 0)) //One is empty, second is not
    {
        return 0;
    }
    double maxLen = a.Length > b.Length ? a.Length: b.Length;
    int minLen = a.Length < b.Length ? a.Length: b.Length;
    int sameCharAtIndex = 0;
    for (int i = 0; i < minLen; i++) //Compare char by char
    {
        if (a[i] == b[i])
        {
            sameCharAtIndex++;
        }
    }
    return sameCharAtIndex / maxLen * 100;
}

string str1 = "ðə ɻɛd fɑks ɪz hʌŋgɻi";
string str2 = "ðæt ɪt foks ɪn ðʌ sʌn ɻe͡i";
char[] str1Char = str1.ToCharArray();
char[] str2Char = str2.ToCharArray();
int matchCount = 0;
int unmatchedCount = 0;

for (int x = 0; x>= str1Char.Length || x >= str2Char; x++;)
{
   if (str1Char[x] == str2Char[x])
      matchCount++;
   else
      unmatchedCount++;
}
int longestString = str1Char.Length;
if (str2Char.Length > longestString )
    longestString = str2Char.Length;
int perc = (matchCount/longestString )*100;

如果第一个字符串比第二个字符串短,这个就会失效但是你会得到jist