比较2个char数组的%差异

时间:2012-11-16 19:11:19

标签: c# .net

我按下按钮时有2个文本框(winforms app)我有以下代码:

        string new_text = txtnew.Text;
        string old_text = txtold.Text;

        char[] arr_new = new_text.ToCharArray();
        char[] arr_old = old_text.ToCharArray();
        double found  = 0.0;
        double not_found = 0.0;
        foreach (char c_old in arr_old)
        {
            foreach (char c_new in arr_new)
            {
                if (c_new == c_old)
                {
                    found++;
                }else{
                    not_found++;
                }
            }
        }
        double percentage //need help here..
        MessageBox.Show(percentage.ToString());

我一直在尝试比较每个数组,以查看另一个数组中是否存在来自1个数组的字符,然后它应该以百分比形式输出差异。那么如果txtNew =“hello worl”和txtold =“hello world”那么差异将是0.1%?无论如何,它被修改的越多,差异越大,直到它处于60%不同的安全状态。

3 个答案:

答案 0 :(得分:2)

您可以通过将not_found除以总计来计算百分比,如下所示:

double percentage = (100.0 * not_found) / (found + not_found);

更精确的方法是计算字符串之间的Edit Distance,然后根据原始字符串长度的百分比表示该距离(即使用编辑距离而不是{ {1}})。

答案 1 :(得分:0)

如果您在内部循环中增加not_found,则最多可达old_text.Length*new_text.Length。这会产生巨大的not_found数字,比你想象的要小得多。

做char数组的东西也没什么意义,内部可以被IndexOf调用替换:

    string new_text = txtnew.Text;
    string old_text = txtold.Text;

    var found = 0;
    foreach (var c_old in old_text)
    {
        if (new_text.IndexOf(c_old) != -1)
        {
          found++;
        }
    }
    //percentage of characters in the old text that also appear in the new text
    double percentage = (100d * found) / old_text.Length;    
    MessageBox.Show(percentage.ToString());

答案 2 :(得分:0)

看看这个维基百科页面: Damerau-Levenshtein distance

在该页面上提供了一个C#功能,我认为这正是您正在寻找的。

编辑:刚刚意识到其他人已经提到了同样的算法,对不起重复。