C# 字符/字符串比较

C# 字符/字符串比较,c#,C#,我正在尝试在我的程序中为搜索功能提供一个建议功能,例如我在搜索部分键入janw doe,它将不输出匹配项-你是说jane doe吗?我不确定问题出在哪里,可能与字符/字符串比较有关。我尝试将两个变量作为类型char进行比较,例如char temp-->temp.Contains…等,但出现了一个错误(char不包含Contains的定义)。我很乐意在这方面提供帮助!(八) if(found==false) { Console.WriteLine(“\n\n未找到匹配项”); int charMa

我正在尝试在我的程序中为搜索功能提供一个建议功能,例如我在搜索部分键入janw doe,它将不输出匹配项-你是说jane doe吗?我不确定问题出在哪里,可能与字符/字符串比较有关。我尝试将两个变量作为类型char进行比较,例如char temp-->temp.Contains…等,但出现了一个错误(char不包含Contains的定义)。我很乐意在这方面提供帮助!(八)

if(found==false)
{
Console.WriteLine(“\n\n未找到匹配项”);
int charMatch=0,charCount=0;
string[]checkArray=新字符串[26];
//建筑工地/////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(int-controlLoop=0;controlLoop=一半)
{
checkArray[controlLoop]=contPeople[controlLoop].name;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
控制台。WriteLine(“你的意思是:”);
for(int a=0;a
字符串由许多字符组成。字符是基本字符,同样,它不“包含”任何其他项。字符串基本上是一个字符数组

用于比较字符串和字符:

char a = 'A';
String alan = "Alan";
Debug.Assert(alan[0] == a);
或者如果你有一个一位数的字符串..我想

char a = 'A';
String alan = "A";
Debug.Assert(alan == a.ToString());
所有这些断言都是真实的

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

下面是我找到的一个小程序,它演示了:


此外,wikipedia链接的字符类型不能有
.Contains()
,因为只有一个字符值类型

在您的情况下(如果我理解),可能需要使用
.Equals()
=
运算符

注意:要正确比较字符串,请使用
.Equals()
, 在这种情况下,
=
运算符不能正常工作,因为
String
是引用类型


希望有此帮助!

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);
            }
        }
var input=“janw doe”;
var people=新字符串[]{“abc”、“123”、“jane”、“jane doe”};
var found=Array.BinarySearch(people,input);//或使用FirstOrDefault()、FindIndex、搜索引擎。。。
if(find<0)//未找到
{
var i=input.ToArray();
var target=“”;
//最相似
//target=people.OrderByDescending(p=>p.ToArray().Intersect(i.Count()).FirstOrDefault();
//在编写代码时:
foreach(人的var p)
{
var count=p.ToArray().Intersect(i.count();
如果(计数>输入长度/2)
{
目标=p;
打破
}
}
如果(!string.IsNullOrWhiteSpace(目标))
{
控制台写入线(目标);
}
}

你的问题不是很清楚,你在哪一行代码上遇到了问题?你可以用==运算符比较两个字符。关键是字符串不能等于一个字符。一个基本上是字符数组,另一个是单个字母、数字等。当然!我只注意到==运算符在字符串比较上。Char type可以与==运算符进行比较,但它是一种值类型。对吗?可能我在帖子中没有解释清楚,对不起!不能直接使用==或Equals()来比较char和string,您仍然需要转换其中一个。例如使用:label[0]。ToString().Equals(“Z”)@Randel better
label[0]=='Z'
我来看看这个算法;S看起来很复杂。我会让你知道它是怎么回事。:)这个算法其实很简单,也许你能找到一个更好的小程序,一步一步地向你展示
        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);
            }
        }