我正在编写代码来检查字符串中的对称性。我转换为Char数组,然后我想使用Array.Reverse方法。我一直得到一个无法将类型void转换为Char []。非常感谢我的代码如下。
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
checkPalindrome("aabaa");
}
public static bool checkPalindrome(string inputString)
{
char[] charArray = inputString.ToCharArray();
char[] reverseArray = Array.Reverse(charArray);
Array.Reverse(charArray);
//Console.Write(charArray);
//Console.Write(reverseArray);
if (charArray = Array.Reverse(charArray))
{
return true;
}
else
{
return false;
}
}
}
}
答案 0 :(得分:8)
你的问题在这里:
char[] reverseArray = Array.Reverse(charArray);
Array.Reverse更改传递它的数组的内容。它没有返回任何值。
你可以使用LINQ代替这样做:
char[] reverseArray = charArray.Reverse().ToArray();
然后,当你检查是否相等时,你需要做的不仅仅是默认的object-equals类型的相等性检查:
if (charArray.SequenceEqual(reverseArray))
此外,.ToArray()
仅在您需要数组时才需要,并且您不需要SequenceEqual()
。 if(something) {return true;} else {return false;}
模式可以简化为return something;
所以整个方法实际上可以写成一行:
public static bool checkPalindrome(string inputString)
{
return inputString.Reverse().SequenceEqual(inputString);
}
答案 1 :(得分:0)
更好的方法 - 没有数组克隆/数组提取:
static bool checkPalindrome(string inputString)
{
var length = inputString.Length;
var half = length / 2 + 1;
return length <= 1 || inputString.Take(half).SequenceEqual(inputString.Reverse().Take(half));
}
答案 2 :(得分:0)
这是确定string
中的对称性的更好方法。
public bool IsSymetric(string str)
{
if(str == null) return true; // or false or throw an exception
for(int i = 0; i < str.Length/2; i++)
{
if(str[i] != str[str.Length - 1 - i])
{
return false;
}
}
return true;
}