如何比较c#中的char[]数组以确定ward是否为回文
我想插入一个词,想知道这是否是一个polidrom。 Polidrom是一个词,如果你把它写反了,没有什么变化,比如: 1234321=反向1234321 abcddcba=反向abcddcba 我写了一个代码,我不知道出了什么问题。 谢谢你的帮助如何比较c#中的char[]数组以确定ward是否为回文,c#,string,C#,String,我想插入一个词,想知道这是否是一个polidrom。 Polidrom是一个词,如果你把它写反了,没有什么变化,比如: 1234321=反向1234321 abcddcba=反向abcddcba 我写了一个代码,我不知道出了什么问题。 谢谢你的帮助 static void Puolidrom(string word) { string ya = word; string ba = word; char[]
static void Puolidrom(string word)
{
string ya = word;
string ba = word;
char[] stcArr = ya.ToCharArray();
char[] stcArr2 = ba.ToCharArray();
Array.Reverse(stcArr);
if (stcArr==stcArr2)
{
Console.WriteLine("poly");
}
else
{
Console.WriteLine("Isn't");
}
}
在代码中,您试图检查一个数组是否与另一个数组相同,但检查的是引用(
==
),而不是数组的元素。更好的方法是检查字符串和反向字符串是否相同
使用函数反转字符串
public static string Reverse( string s )
{
char[] charArray = s.ToCharArray();
Array.Reverse( charArray );
return new string( charArray );
}
然后使用它:
if(word.Equals(Reverse(word)))
{
//palindrom
}
else
{
//not
}
使用
确保使用System.Linq时有
位于.cs
文件的顶部
if (stcArr.SequenceEqual(stcArr2))
{
Console.WriteLine("poly");
}
else
{
Console.WriteLine("Isn't");
}
由于数组是引用类型,=
操作符将通过调用ReferenceEquals
而不是通过检查数组的内容来检查数组的相等性
在您的情况下,它们没有相同的引用,因此
=
运算符将始终返回false您可以编写一个扩展方法:
public static bool IsPalindrome(this string str1)
{
if(string.IsNullOrWhiteSpace(str1)) return false;
return str1.SequenceEqual(str1.Reverse());
}
并且做:
string ya = "word";
bool isPalindrome = ya.IsPalindrome();
您不需要比较字符数组,更简单的方法是使用LINQ创建一个反向字符串,然后检查两个字符串是否相同:
static bool IsPalindrome(string word)
{
if (String.IsNullOrEmpty(word))
return false;
return word == String.Join("", word.Reverse());
}
这里有一个替代方案
public static bool IsPalindrome(string checkString)
{
if (string.IsNullOrEmpty(checkString))
return false;
char[] arr = checkString.ToCharArray();
for (int i = 0; i < arr.Length/2; i++)
{
if (arr[i] != arr[arr.Length - i - 1])
return false;
}
return true;
}
公共静态bool IsPalindrome(字符串校验字符串)
{
if(string.IsNullOrEmpty(checkString))
返回false;
char[]arr=checkString.ToCharArray();
对于(int i=0;i
这会检查回文,而不是polidrome?(相同的字母,两个单词,不一定是相反的。)不,它总是正确的。stcArr和stcArr2是同一个单词(请看代码),因此字母是相同的==运算符不检查数组的元素。它将参照检查@wudzik@M.kazemAkhgary是的,=
和等于
之间没有区别@wudzik您的解决方案将与==
一起使用,因为您将char数组转换为string比较两个单词并说明其中一个是否是第二个单词的palindorme?回文是单个单词的属性,例如:“word”.isAlindrome()
不是“word”。回文(“另一个”)
不需要通过str2。字符串。反向?我修改了它。现在还早。如果有任何答案对你有帮助,请接受