【问题标题】:Converting a fully lower case / uper case char array back to the user input将完全小写/大写字符数组转换回用户输入
【发布时间】:2014-11-26 17:36:17
【问题描述】:

我在 c# 上做了一个回文程序。为了消除区分大小写,我必须将输入完全转换为小写(或大写)。现在,当我打印反向数组时,我希望区分大小写。比如如果 input = Madam,我希望 Reverse 是 = madaM。现在我知道我可以从输入中创建一个新的 char 数组,而且我已经做到了。但我想以某种方式操纵 LowerInvariant 数组。我知道我的代码的 Upper 方法不起作用,因为数组被转换为小写。

using System;
using System.Linq;

public class Palindrome
 {
   public static void Main(string [] args)
   {
      string input = Console.ReadLine();
      string lower = input.ToLowerInvariant();
      char[] array = lower.ToCharArray();
      Array.Reverse(array);
      Upper(array, input);
      Console.WriteLine("\nPalindrome: {0}", array.SequenceEqual(lower));
      Console.ReadKey();
   }

   public static void Upper(char[] array, string input)
   {
      for (int i = 0; i < array.Length; i++)
      {
         if (Input's [i] char is Upper) => Not sure how to put this as a code.
            array[i] = Char.ToUpper(array[i]);
      }

      Console.WriteLine("Reverse array :");
      for (int i = 0; i < array.Length; i++)
         Console.Write("{0}", array[i]);
   }
}

【问题讨论】:

  • 您的 Upper 方法看起来不像您想要的那样 - 您在说“如果字符已经是大写,则将其设为大写” - 这肯定不是您想要的。
  • 为什么不反转输入字符串?
  • @JonSkeet 抱歉,我忘了编辑它。在 if 语句中,我希望编译器查看循环中的该字符是否在输入中较高。当然这不是我在代码中所做的,但我不知道该怎么做。
  • 为什么不直接使用Console.WriteLine(String.Reverse())?太简单了?
  • @LeffeBrune 我不知道这会有什么帮助,你能解释一下吗?

标签: c# arrays palindrome


【解决方案1】:

这应该做你想做的:

public static void Upper(char[] array, string input)
{
    Console.WriteLine("Reverse array :");
    Console.Write(new string(input.AsEnumerable().Reverse().ToArray()));
}

不必担心小写数组,您可以简单地反转原始输入并从反转的字符中创建一个新字符串。

【讨论】:

  • array 参数如果不被使用有什么意义?
  • @DrewKennedy:没有。我只是想提供一个可行的最小代码更改。 OP 可以重命名和重构为他的心的内容。 :-)
  • @StriplingWarrior 谢谢! :) 但是有没有办法通过使用数组来做到这一点?
  • 这和Conso≤.WriteL∈e(Str∈g.Reverse())Console.WriteLine(String.Reverse())有什么不同?调用 ToEνmerab≤()ToEnumerable() 没有意义,因为 Str∈gString 类已经实现了 IEνmerab≤IEnumerable。无论如何,将字符串转换为 char 数组然后从中构造一个新字符串有什么意义?
  • @ThomasWeller:我在你的评论中得到了一些奇怪的字符编码,但我想我理解你的问题。正如您所说,您可以省略.AsEnumerable()。但是,.Reverse() 在这种情况下不返回 String,而是返回 IEnumerable&lt;char&gt;。从技术上讲,你可以将char[].ToArray() 调用直接传递给.Write() 方法,但是如果你给它们(string, int, int)(char[], int, int),它们的行为会有所不同。我觉得将其转换为 string 会更安全。
猜你喜欢
  • 1970-01-01
  • 2012-05-06
  • 2023-03-26
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 2014-04-19
相关资源
最近更新 更多