字符/字符串比较
我试图在我的程序中为搜索功能提供一个建议功能,例如我在搜索部分输入janw doe,它会输出无匹配 - 你的意思是jane doe?我不知道是什么问题,也许是做什么与字符/字符串比较..我试着将两个变量作为类型字符比如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]);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
一个字符串由许多字符组成。一个角色是一个原始的,同样,它不包含任何其他项目。一个字符串基本上是一个字符数组。
对于比较字符串和字符:
char a = 'A';
String alan = "Alan";
Debug.Assert(alan[0] == a);
或者,如果你有一个单一的数字串。我想
char a = 'A';
String alan = "A";
Debug.Assert(alan == a.ToString());
所有这些断言是真的
但是,主我想对你的问题发表评论的原因,是提出一种替代方法来暗示“你的意思是?”。有一种称为Levenshtein Distance的算法,用于计算将一个字符串转换为另一个字符串所需的“单个字符编辑数量”。它可以用来衡量两个琴弦有多接近。你可能想看看这个算法是如何工作的,因为它可以帮助你。
这里有一个小程序,我发现这表明:Approximate String Matching with k-differences
而且*的链接Levenshtein distance
我会看看算法; S看起来很复杂O_o。我会让你知道它是怎么回事。 :) – Quigg15405
算法实际上非常简单,也许看看您是否可以找到一个更好的小程序来向您显示步骤 – Alan
char
型这么想的有Contains()
方法,但是你可以用个人所得税是这样的:'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);
}
}
你的问题不是很清楚,你遇到什么问题? – Alan