【问题标题】:C# Palindrome Test [duplicate]C#回文测试[重复]
【发布时间】:2020-01-04 03:44:08
【问题描述】:

我需要创建一个 IsPalindrome 函数,它将确定提供的字符串是否为回文。在评估字符串是否为回文时,将考虑字母数字字符。话虽如此,我在试图忽略空格和大写字母时遇到了麻烦。这是我的功能现在的样子。 如果这有所不同:在这个函数完成后,我将不得不解析一个 JSON 文件并将“字符串”数组中的每个元素放入 IsPalindrome 函数中。 有什么建议吗?

 private static bool IsPalindrome(string value)
    {
        var min = 0;
        var max = value.Length - 1;

        while (true)
        {
            if (min > max)
                return true;
            var a = value[min];
            var b = value[max];

            if (if (char.ToLower(a) == char.ToLower(b))
             {
              return true;
             }
              else {
                 return false;
              }

            min++;
            max--;
        }

【问题讨论】:

  • 考虑使用for 循环而不是while 循环,因为它可能更容易推理。

标签: c# function palindrome


【解决方案1】:

我这样做的方法是将字符串转换为字符数组,跳过非字母字符,并使所有字符小写。然后,我将使用索引来检查数组的前半部分是否等于最后一半。像这样的:

public static bool IsPalindrome(string value)
{
    char[] forwards = (from c in value.ToLower().ToCharArray() where char.IsLetter(c) select c).ToArray();
    int middle = (forwards.Length / 2) + 1;
    for (int i = 0; i < middle; i++)
        if (forwards[i] != forwards[forwards.Length - 1 - i])
            return false;
    return true;
}

第一行使用 LINQ 来制作数组,所以你需要一个 using System.Linq;

【讨论】:

  • 已经有很多这样的答案了...除了大多数人没有错误地声称您需要将字符串转换为 char 数组才能遍历字符串的字符...相反,您可以例如,我已经解释了 OP 做错了什么......
猜你喜欢
  • 2011-07-31
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2012-02-06
  • 1970-01-01
  • 2014-03-26
  • 2011-07-06
相关资源
最近更新 更多