创建Palindrome程序时出现逻辑错误

时间:2014-06-11 13:21:20

标签: c#

我试图让Palindrome程序尽可能小。但是,该程序给出了逻辑错误。当我输入回文字符串时,它会给出" False"结果与预期相反。

char[] phrase;
Console.WriteLine((phrase = Console.ReadLine().ToArray())==phrase.Reverse().ToArray());
Console.ReadLine();

我不想增加这个程序的语句数量。

3 个答案:

答案 0 :(得分:5)

在.NET中,数组没有重载的相等运算符。使用Enumerable.SequenceEquals

更彻底地阅读你的代码,你使事情变得更加复杂。

    string phrase = Console.ReadLine();
    var reversedPhrase = phrase.Reverse(); //Type is IEnumerable<char>
    Console.WriteLine(phrase.SequenceEquals(reversedPhrase));

我建议你不要像你那样在表达式中埋藏副作用。该代码很可能是一个测试问题,看看学生是否可以解决它。

答案 1 :(得分:1)

如果你想通过数组来做,那么你可以试试这个

char[] phrase;
Console.WriteLine(phrase = Console.ReadLine().ToArray().SequenceEqual(phrase.Reverse().ToArray()));
Console.ReadLine();

就像我们说使用sequenceequal

一样

答案 2 :(得分:0)

由于您创建了2个不同的数组和数组引用类型==检查引用相等,而不是值。

您可以使用Enumerable.SequenceEqual而不是返回;

  

true 如果两个源序列具有相同的长度和它们的长度   根据默认的相等性,相应的元素是相等的   比较器的类型;

Console.WriteLine(myString.SequenceEqual(myString.Reverse()));