#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
inRanks
. И измените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"));