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