【问题标题】:Convert a Letter to its alphabet numerical Rank将字母转换为其字母数字等级
【发布时间】:2014-06-19 18:59:51
【问题描述】:

我正在尝试将一个字母转换为其字母数字顺序,例如,如果我有一个“A”,它会给我 00 或一个“C”02

如何在 c# 中编写代码?

编辑:这是我尝试过的

我创建了这个类:

   public class AlphabetLetter 
    {
        public char Letter {get; set;}
        public int Rank {get; set;} 
    }

这两个列表:

     public List<char> Letters = new List<char> {
  'a' ,'b' ,'c' ,'d' ,'e', 'f' ,'g' , 'h' ,  'i' , 'j' , 'k' , 'l' , 'm',
  'n' ,'o' ,'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z'     
    };
        public List<int> Ranks = new List<int> { 

        00,01,02,04,05,06,07,08,09,10,11,12,13,
        14,15,16,17,18,19,20,21,22,23,24,25

        };


    public List<AlphabetLetter> Alphabet = new List<AlphabetLetter>( );

我在构造函数中创建了字母:

for (int i = 0; i < 25; i++) 
           {
               Alphabet.Add(new AlphabetLetter { Rank = Ranks[i], Letter = Letters[i] });

并试图用这个函数匹配一个字符:

   public  int   Numberize(char Letter)
       {

           if (Letter != null)
           {
               foreach (AlphabetLetter _letter in Alphabet)
               {

                   if (Letter == _letter.Letter)
                   {

                       return _letter.Rank;

                   }
                   else
                   {
                       return 896;
                   }
               }
           }
           else {

               return 999;
           }



       }
               }

但是这种方法行不通,而且太繁琐。

有什么建议吗?

【问题讨论】:

  • 通过破坏您友好的 IDE 并自己编写一些代码。试试看。然后,如果您有问题,请提出问题。
  • 是的,我已经尝试了一些代码,但它不起作用,我将在编辑时发布它
  • 当然,这是非常基本的。话虽如此,并不是每个新程序员(尤其是如果他们没有上过学)都会认识到字符只是表格中的数字。
  • 该代码必须是我见过的尝试解决此问题的最复杂的方法。只需利用答案中的 ASCII 表即可:)
  • @user2505650 好的。所以我现在进行了测试 - 你必须在 foreach 的右括号之后添加 return 896;。没有else { }。并且输入只能是小写字母。经测试。作品。您还必须在Ranks 中添加03。并将初始化中的25改成26

标签: c#


【解决方案1】:

您首先获取它的 Unicode 值:

int charValue = Convert.ToInt32('A');

然后说明“A”在 Unicode 表中的位置 (65)

int rank = charValue - 65;

请注意,这不适用于小写字母,因为它们的位置不同。您可以在字符的字符串版本上使用 ToLowerToUpper 来取消它(如在另一个答案中)。

【讨论】:

  • 我想自己编写代码而不使用任何此类库
  • @user2505650,“库”是指Convert 类吗?它基本上只是在做一个演员。如果你不能施放,那我不知道你要做什么......
  • @user2505650 (int)'A' 会更好吗?这基本上就是它正在做的事情......您可以在线查找 Convert 的源代码,以了解它的确切作用。 C# 有很好的库来隐藏这些细节,为什么会有限制?
  • 请注意,我最初说的是 ASCII。 Convert.ToInt32 采用 unicode 字符。然而,“A”的位置在两者中是相同的。
  • 我好奇地想看看在不使用任何库的情况下我能写多少代码
【解决方案2】:
string yourLetter = "C";
int i = yourLetter.ToLower().ToCharArray()[0] - 'a';

这将返回 2。

解释:char 的字符是按顺序排列的。但是,有两个序列 - 大写和小写。所以首先我们将其转换为小写。

然后将其更改为字符(通过使用内置方法将字符串转换为字符数组,然后取第一个也是唯一一个)。

然后,利用 c# 将 char 视为数字这一事实,从中减去序列的第一个。

【讨论】:

  • 有人对每个答案都投了反对票。我猜是因为他们不喜欢这个问题?我对你的回答唯一的问题是它缺乏解释。不过不值得投反对票。
  • @BradleyDotNET 已修复。
  • 很好的解释!我为您提供了不区分大小写的解决方案 +1。
【解决方案3】:

您不需要任何花哨的转换。只需减去 ascii A 并加 1。

using System;
using System.IO;

public class P{
    public static void Main(string[] args) {
       var letter = 'C';
       Console.WriteLine(letter - 'A' + 1);
    }
}

如果您想用前导零填充,请使用 ToString 和格式。

   Console.WriteLine((letter - 'A' + 1).ToString("00"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多