字符串比较

时间:2012-10-16 01:21:51

标签: c#

我正在尝试为我的程序中的搜索功能提供一个建议功能,例如我在搜索部分输入janw doe并输出NO MATCH - 你的意思是jane doe?我不确定问题是什么,可能与char / string比较有关..我尝试将两个变量比较为char类型,例如char temp - > temp.Contains ...等但出现错误( char不包含Contains的定义。希望对此有所帮助! 8)

if (found == false)
        {
            Console.WriteLine("\n\nMATCH NOT FOUND");
            int charMatch = 0, charCount = 0;
            string[] checkArray = new string[26];
            //construction site  /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            for (int controlLoop = 0; controlLoop < contPeople.Length; controlLoop++)
            {
                foreach (char i in userContChange)
                {
                    charCount = charCount + 1;
                }
                for (int i = 0; i < userContChange.Length; )
                {
                    string temp = contPeople[controlLoop].name;
                    string check=Convert.ToString(userContChange[i]);
                    if (temp.Contains(check))
                    {
                        charMatch = charMatch + 1;
                    }
                }
                int half = charCount / 2;
                if (charMatch >= half)
                {
                    checkArray[controlLoop] = contPeople[controlLoop].name;
                }
            }
///////////////////////////////////////////////////////////////////////////////////////////////////////////
                Console.WriteLine("Did you mean: ");
                for (int a = 0; a < checkArray.Length; a++)
                {
                    Console.WriteLine(checkArray[a]);
                }
///////////////////////////////////////////////////////////////////////////////////////////////////

3 个答案:

答案 0 :(得分:8)

字符串由许多字符组成。字符是基元,同样,它不“包含”任何其他项。字符串基本上是一个字符数组。

用于比较字符串和字符:

char a = 'A';
String alan = "Alan";
Debug.Assert(alan[0] == a);

或者如果你有一个数字字符串..我想

char a = 'A';
String alan = "A";
Debug.Assert(alan == a.ToString());

所有这些断言都是真的

但是,我想对你的问题发表评论的主要原因是建议另一种方法来建议“你的意思是什么吗?”。有一种称为Levenshtein Distance的算法,它计算将一个字符串转换为另一个字符串所需的“单个字符编辑的数量”。它可以用来衡量两个字符串的接近程度。您可能希望了解此算法的工作原理,因为它可以帮助您。

这是我发现的applet,它展示了:Approximate String Matching with k-differences

维基百科链接Levenshtein distance

答案 1 :(得分:0)

Char类型不能有.Contains(),因为只有1个char值类型。

在您的情况下(如果我了解),您可能需要使用.Equals()==运营商。

注意:要正确比较String,请使用.Equals()==运算符在这种情况下效果不佳,因为String是引用类型。

希望这有帮助!

答案 2 :(得分:0)

char类型不具备Contains()方法,但您可以像这样使用iit:'a'.ToString().Contains(...)

如果不考虑性能,另一种简单的方法:

        var input = "janw doe";
        var people = new string[] { "abc", "123", "jane", "jane doe" };

        var found = Array.BinarySearch<string>(people, input);//or use FirstOrDefault(), FindIndex, search engine...
        if (found < 0)//not found
        {
            var i = input.ToArray();
            var target = "";

            //most similar
            //target = people.OrderByDescending(p => p.ToArray().Intersect(i).Count()).FirstOrDefault();

            //as you code:
            foreach (var p in people)
            {
                var count = p.ToArray().Intersect(i).Count();
                if (count > input.Length / 2)
                {
                    target = p;
                    break;
                }
            }

            if (!string.IsNullOrWhiteSpace(target))
            {
                Console.WriteLine(target);
            }
        }