如何比较c#中的char[]数组以确定ward是否为回文

如何比较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[]

我想插入一个词,想知道这是否是一个polidrom。 Polidrom是一个词,如果你把它写反了,没有什么变化,比如: 1234321=反向1234321 abcddcba=反向abcddcba 我写了一个代码,我不知道出了什么问题。 谢谢你的帮助

  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。字符串。反向?我修改了它。现在还早。如果有任何答案对你有帮助,请接受