C# C语言中的置乱字符串操作#
我已经编写了一个简短的代码来检查两个加扰字符串的等价性。 但是代码并没有像预期的那样工作 代码如下所示C# C语言中的置乱字符串操作#,c#,C#,我已经编写了一个简短的代码来检查两个加扰字符串的等价性。 但是代码并没有像预期的那样工作 代码如下所示 string firstString, secondString; Console.Write("Enter the First String: "); firstString = Console.ReadLine(); Console.Write("Enter the 2nd String: "); seco
string firstString, secondString;
Console.Write("Enter the First String: ");
firstString = Console.ReadLine();
Console.Write("Enter the 2nd String: ");
secondString = Console.ReadLine();
char[] firstArray = firstString.ToArray();
char[] secondArray = secondString.ToArray();
Array.Sort(firstArray);
Array.Sort(secondArray);
firstString = firstArray.ToString();
secondString = secondArray.ToString();
if(firstString == secondString)
{
Console.Write("Matched");
}
else
Console.Write("Not Matched");
Console.ReadKey();
}
}
将以字符串格式返回数组类型。如果进行调试,您将看到firstString
的值将为
System.Char[]
而不是数组的内容
因此,字符串比较将始终返回true
为了实现您的结果,如果您可以使用
LINQ
,您可以像这样使用SequenceEqual
:
Console.Write("Enter the First String: ");
var firstString = Console.ReadLine();
Console.Write("Enter the 2nd String: ");
var secondString = Console.ReadLine();
var list1 = firstString.ToList();
var list2 = secondString.ToList();
list1.Sort();
list2.Sort();
if (list1.SequenceEqual(list2))
Console.Write("Matched");
else
Console.Write("Not Matched");
您使用的输入是什么?设置断点并调试代码是跟踪代码运行过程中发生的情况的最佳方法。可能与我已经做过的相同。但仍然不起作用。如果我使用foreach循环来显示字符串的字符,那么每个字符都会被排序,但是如果else循环它与另一个字符串不匹配,那么就不要使用foreach循环,只需使用实际的调试器并逐步完成它。您将看到下面的答案是正确的,您正在比较类型名的字符串和类型名的字符串,这意味着它们相等。这肯定是有效的。这是一个例子。您使用的输入是什么?
Console.Write("Enter the First String: ");
var firstString = Console.ReadLine();
Console.Write("Enter the 2nd String: ");
var secondString = Console.ReadLine();
var list1 = firstString.ToList();
var list2 = secondString.ToList();
list1.Sort();
list2.Sort();
if (list1.SequenceEqual(list2))
Console.Write("Matched");
else
Console.Write("Not Matched");