Преобразование буквы в числовой ранг алфавита

#c#

#c#

Вопрос:

Я пытаюсь преобразовать букву в числовой порядок алфавита, например, если у меня есть «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;
           }



       }
               }
  

Но этот метод не работает и слишком утомителен.

Есть предложения?

Комментарии:

1. Используя вашу дружественную среду разработки и написав некоторый код самостоятельно. Попробуйте это. Затем, если у вас есть проблемы, задайте вопрос.

2. Да, я уже пробовал некоторый код, но он не работает, я опубликую его при редактировании

3. Конечно, это довольно просто. При этом не каждый начинающий программист (особенно, если они не ходили в школу) поймет, что символы — это просто цифры в таблице.

4. Этот код должен быть самым запутанным способом, который я когда-либо видел, чтобы попытаться решить эту проблему. Просто воспользуйтесь таблицей ASCII, как в ответах 🙂

5. @user2505650 OK. Итак, я проверил сейчас — вы должны сразу return 896; после foreach закрывающей скобки. Без else { } . И ввод должен быть только строчной буквой. Проверено. Работает. Вы также должны добавить 03 in Ranks . И измените 25 инициализацию на 26 .

Ответ №1:

Вы начинаете с простого получения ее значения в Юникоде:

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

Затем укажите, где находится ‘A’ в таблице Unicode (65)

 int rank = charValue - 65;
  

Обратите внимание, что это не сработает для строчных букв, поскольку они находятся в другом положении. Вы можете использовать ToLower или ToUpper в строковой версии символа, чтобы аннулировать это (как в другом ответе).

Комментарии:

1. я хотел бы закодировать его сам, не используя никаких таких библиотек

2. @user2505650, под «библиотеками» вы подразумеваете Convert класс? По сути, это просто выполнение приведения. Если вы не можете выполнить приведение, то я не уверен, что вы собираетесь делать…

3. @user2505650 Будет ли (int) ‘A’ лучше? Это в основном то, что он делает… Вы можете посмотреть источник для Convert онлайн, чтобы точно увидеть, что он делает. В C # есть отличные библиотеки для сокрытия от вас этой детали, почему ограничение?

4. Обратите внимание, что изначально я сказал ASCII. Преобразование. ToInt32 принимает символ Юникода . Однако позиция «A» одинакова в обоих случаях.

5. Я пытаюсь из любопытства посмотреть, сколько я могу кодировать без использования каких-либо библиотек

Ответ №2:

 string yourLetter = "C";
int i = yourLetter.ToLower().ToCharArray()[0] - 'a';
  

Это возвращает 2.

Объяснение: символы as char ‘s расположены в последовательном порядке. Однако есть две последовательности — прописные и строчные. Итак, сначала мы преобразуем его в нижний регистр.

Затем измените его на символ (используя встроенный метод для превращения строки в массив символов, а затем возьмите первый и единственный).

Затем, используя тот факт, что c # будет счастливо обрабатывать символ как число, вычтите из него первую часть последовательности.

Комментарии:

1. Кто-то отклонил каждый ответ. Я думаю, потому что им не нравится вопрос? Единственная проблема, с которой я сталкиваюсь с вашим ответом, заключается в том, что в нем отсутствует объяснение. Тем не менее, не стоит опускать голос.

2. Исправлено @BradleyDotNET.

3. Хорошее объяснение! Я дал вам свой 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"));