Как можно быстро получить все буквы русского или английского алфавита?

Как можно быстро получить все буквы русского или английского алфавита?

Просматривая исходник одной из программ, увидел следующую строку:

List<char> alphabet = new List<char> {"A","B","C","D","E" и т.д.};

Как видно обычный лист, заполненный значениями, в плане синтаксиса ошибок нет, но есть один минус, все значения были введены вручную. С одной стороны значений не много, всего 26, в принципе можно и ввести, но если, к примеру, понадобиться добавить ещё один такой же лист, который будет содержать все буквы русского алфавита или сразу два списка обоих алфавитов в нижнем регистре, как быть тогда, тоже все руками вводить? Конечно, можно найти и скопировать уже готовый список значений и ничего вводить вручную не придется, но есть ещё один способ, о нём я расскажу в этой статье.

Как получить все буквы английского алфавита

Для начала вспоминаем, что есть такая вещь, как Unicode. &#171;Юникод — это стандарт кодирования символов, который позволяет представить знаки практически всех письменных языков&#187; &#8212; Википедия. В данный момент в нём зарезервировано 1.112.064 позиций символов, из которых сейчас используется чуть более 100 000. Кодовое пространство Unicode разделено на 17 плоскостей. Нас интересует нулевая (базовая многоязычная) плоскость, имеющая диапазон от U+0000 до U+FFFF. Нулевая плоскость, содержит символы, часто употребительных письменностей и так же разбита на определенные области (диапазоны).

Латиница

Все области нас, конечно же, не интересуют, будем работать лишь с некоторыми диапазонами значений. И так, например, в нашей программе требуется получить все буквы английского алфавита от A до Z. Сразу надо пояснить, что Юникод не содержит буквы английского алфавита, точно так же, как и не содержит буквы немецкого, русского алфавита. А всё потому, что хоть мы и говорим, например буквы английского алфавита, на самом деле все буквы немецкого, итальянского, французского и того же английского языка состоят из 26 букв латинского алфавита. Поэтому нам нужно искать область, выделенную под латиницу.

Основной диапазон, выделенный под латиницу от U+0020 до U+007F (Основная латиница), где U &#8212; Unicode, а следом идут четыре шестнадцатеричных числа. Вся эта область нам, конечно же, не нужна, потому что кроме букв, в нёй так же содержится ещё много других знаков и чисел, которые нас пока что не интересуют.

char value = '\u0025'; //знак %
char value2 = '\u0044'; // латинская буква D 

Для указания юникод последовательности в языке c# используется управляющая последовательность символов \u.

Юникод запись, например &#8216;\u0025&#8217; можно сократить, если использовать другую управляющую последовательность символов \x

char value = '\x25'; //знак %
char value2 = '\x44';//D

Результаты те же.

Выделенная область под латиницу занимает диапазон от &#8216;\u0020&#8217; до &#8216;\u007F&#8217; (&#8216;\x20&#8217;- &#8216;\x7F&#8217;). Этот основной диапазон, который кроме букв, так же содержит числа и символы (%, $, #), нам же нужен отрезок, который содержит только буквы латинского алфавита. Сразу хочу сказать, что буквы представлены, как в верхнем регистре, то есть все буквы от A до Z большие, так и в нижнем регистре, когда все буквы от a до z маленькие.

Область, выделенная под буквы верхнего регистра: от &#8216;\x41&#8217; до &#8216;\x5А&#8217;

char value = '\x41'; //A
char value2 = '\x5А'; //Z
char value2 = '\u005A'; //Z

Шестнадцатеричная система не очень удобна для восприятия, поэтому переведем шестнадцатеричные коды в десятичную систему.

Как перевести число из шестнадцатеричной системы в десятичную

Сначала добавим строку: using System.Globalization;

Затем, берём шестнадцатеричный набор символов &#8216;\x41&#8217;, убираем первые два символа (\x) оставляем только 41, после чего используя метод parse, преобразуем строку в число.

string hex = "41"; //A
int dec = int.Parse(hex, NumberStyles.HexNumber); //65

либо обрезаем первые два символа

string hex = "\x41"; //A
int.Parse(s.Substring(2), NumberStyles.HexNumber); //тоже самое 65

В результате преобразования получили число 65, если теперь подставить ‘\x5А’ и так же преобразовать строку в число, то получим число 90. Из этого следует, что диапазон от 65-90 &#8212; это и есть наш отрезок, в котором содержаться все латинские буквы в верхнем регистре, как видно ничего сложного.

Как перевести число в шестнадцатиричную систему

Обратный перевод dec в hex.

int dec = 65;
string hexValue = dec.ToString("X"); //41 ('\x41')

либо в unicode

string hexValue = dec.ToString("X4"); //0041 ('\u0041')

В результате всех вычислений получаем следующую табличку:

Название Символы DEC HEX
Латиница A..Z 65..90 41..5A
Латиница a..z 97..122 61..7A

Теперь имея на руках данную таблицу, можно легко получить, к примеру, массив всех английских букв от A до Z в верхнем регистре.

static void Main()
{
List<char> alphabet = new List<char>();
for (int i = 65; i < 91; i++)
{
alphabet.Add((char)i);
}
//Выводим все буквы
for (int i = 0; i < alphabet.Count; i++)
{
Console.WriteLine(i + 1 + " - " + alphabet[i]);
}
Console.ReadLine();
}

Результат:

алфавит

А вот так, например можно вывести слово HELLO из полученного массива

Console.WriteLine(alphabet[7].ToString() + alphabet[4] +
alphabet[11] + alphabet[11] + alphabet[14]);

Как получить все буквы русского алфавита

С латиницей, надеюсь всё понятно, теперь рассмотрим, как получить буквы русского алфавита. В отличие от английского алфавита, в русском используется Кириллица (Cyrillic), под которую так же в нулевой плоскости выделен определенный диапазон: U+0400..U+04FF (Unicode 1.1).

Название Символ DEC HEX DEC код Ё
Кириллица А…Я 1040..1071 0410..042F 1025
Кириллица а..я 1072..1103 0430..044F 1105

Как видно всё то же самое, но есть один нюанс, в диапазон значений не попадает буква Ё, как для нижнего, так и верхнего регистра.

В следующем примере показано, как получить все буквы русского алфавита от А до Я в верхнем регистре.

List<char> Alphabet = new List<char>();
for (int i = 1040; i < 1072; i++)
{
Alphabet.Add((char)i);
//добавляем Ё
if (i == 1045)
Alphabet.Add((char)1025);
}

И напоследок таблица чисел

Название Символы DEC HEX
Числа 0..9 48..57 30..39

Читайте также:

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*