Просматривая исходник одной из программ, увидел следующую строку:
Как видно обычный лист, заполненный значениями, в плане синтаксиса ошибок нет, но есть один минус, все значения были введены вручную. С одной стороны значений не много, всего 26, в принципе можно и ввести, но если, к примеру, понадобиться добавить ещё один такой же лист, который будет содержать все буквы русского алфавита или сразу два списка обоих алфавитов в нижнем регистре, как быть тогда, тоже все руками вводить? Конечно, можно найти и скопировать уже готовый список значений и ничего вводить вручную не придется, но есть ещё один способ, о нём я расскажу в этой статье.
Как получить все буквы английского алфавита
Для начала вспоминаем, что есть такая вещь, как Unicode. Юникод — это стандарт кодирования символов, который позволяет представить знаки практически всех письменных языков Википедия. В данный момент в нём зарезервировано 1.112.064 позиций символов, из которых сейчас используется чуть более 100 000. Кодовое пространство Unicode разделено на 17 плоскостей. Нас интересует нулевая (базовая многоязычная) плоскость, имеющая диапазон от U+0000 до U+FFFF. Нулевая плоскость, содержит символы, часто употребительных письменностей и так же разбита на определенные области (диапазоны).
Латиница
Все области нас, конечно же, не интересуют, будем работать лишь с некоторыми диапазонами значений. И так, например, в нашей программе требуется получить все буквы английского алфавита от A до Z. Сразу надо пояснить, что Юникод не содержит буквы английского алфавита, точно так же, как и не содержит буквы немецкого, русского алфавита. А всё потому, что хоть мы и говорим, например буквы английского алфавита, на самом деле все буквы немецкого, итальянского, французского и того же английского языка состоят из 26 букв латинского алфавита. Поэтому нам нужно искать область, выделенную под латиницу.
Основной диапазон, выделенный под латиницу от U+0020 до U+007F (Основная латиница), где U Unicode, а следом идут четыре шестнадцатеричных числа. Вся эта область нам, конечно же, не нужна, потому что кроме букв, в нёй так же содержится ещё много других знаков и чисел, которые нас пока что не интересуют.
Для указания юникод последовательности в языке c# используется управляющая последовательность символов \u.
Юникод запись, например ‘\u0025’ можно сократить, если использовать другую управляющую последовательность символов \x
Результаты те же.
Выделенная область под латиницу занимает диапазон от \u0020 до \u007F (\x20 – \x7F). Этот основной диапазон, который кроме букв, так же содержит числа и символы (%, $, #), нам же нужен отрезок, который содержит только буквы латинского алфавита. Сразу хочу сказать, что буквы представлены, как в верхнем регистре, то есть все буквы от A до Z большие, так и в нижнем регистре, когда все буквы от a до z маленькие.
Область, выделенная под буквы верхнего регистра: от \x41 до \x5А
Шестнадцатеричная система не очень удобна для восприятия, поэтому переведем шестнадцатеричные коды в десятичную систему.
Как перевести число из шестнадцатеричной системы в десятичную
Сначала добавим строку: using System.Globalization;
Затем, берём шестнадцатеричный набор символов \x41, убираем первые два символа (\x) оставляем только 41, после чего используя метод parse, преобразуем строку в число.
либо обрезаем первые два символа
В результате преобразования получили число 65, если теперь подставить ‘\x5А’ и так же преобразовать строку в число, то получим число 90. Из этого следует, что диапазон от 65-90 — это и есть наш отрезок, в котором содержаться все латинские буквы в верхнем регистре, как видно ничего сложного.
Как перевести число в шестнадцатиричную систему
Обратный перевод dec в hex.
либо в unicode
В результате всех вычислений получаем следующую табличку:
Теперь имея на руках данную таблицу, можно легко получить, к примеру, массив всех английских букв от A до Z в верхнем регистре.
А вот так, например можно вывести слово HELLO из полученного массива
Как получить все буквы русского алфавита
С латиницей, надеюсь всё понятно, теперь рассмотрим, как получить буквы русского алфавита. В отличие от английского алфавита, в русском используется Кириллица (Cyrillic), под которую так же в нулевой плоскости выделен определенный диапазон: U+0400..U+04FF (Unicode 1.1).
Как видно всё то же самое, но есть один нюанс, в диапазон значений не попадает буква Ё, как для нижнего, так и верхнего регистра.
В следующем примере показано, как получить все буквы русского алфавита от А до Я в верхнем регистре.
И напоследок таблица чисел
Читайте также:
C#:
List<char> alphabet = new List<char> {"A","B","C","D","E" и т.д.};
Как видно обычный лист, заполненный значениями, в плане синтаксиса ошибок нет, но есть один минус, все значения были введены вручную. С одной стороны значений не много, всего 26, в принципе можно и ввести, но если, к примеру, понадобиться добавить ещё один такой же лист, который будет содержать все буквы русского алфавита или сразу два списка обоих алфавитов в нижнем регистре, как быть тогда, тоже все руками вводить? Конечно, можно найти и скопировать уже готовый список значений и ничего вводить вручную не придется, но есть ещё один способ, о нём я расскажу в этой статье.
Как получить все буквы английского алфавита
Для начала вспоминаем, что есть такая вещь, как Unicode. Юникод — это стандарт кодирования символов, который позволяет представить знаки практически всех письменных языков Википедия. В данный момент в нём зарезервировано 1.112.064 позиций символов, из которых сейчас используется чуть более 100 000. Кодовое пространство Unicode разделено на 17 плоскостей. Нас интересует нулевая (базовая многоязычная) плоскость, имеющая диапазон от U+0000 до U+FFFF. Нулевая плоскость, содержит символы, часто употребительных письменностей и так же разбита на определенные области (диапазоны).
Латиница
Все области нас, конечно же, не интересуют, будем работать лишь с некоторыми диапазонами значений. И так, например, в нашей программе требуется получить все буквы английского алфавита от A до Z. Сразу надо пояснить, что Юникод не содержит буквы английского алфавита, точно так же, как и не содержит буквы немецкого, русского алфавита. А всё потому, что хоть мы и говорим, например буквы английского алфавита, на самом деле все буквы немецкого, итальянского, французского и того же английского языка состоят из 26 букв латинского алфавита. Поэтому нам нужно искать область, выделенную под латиницу.
Основной диапазон, выделенный под латиницу от U+0020 до U+007F (Основная латиница), где U Unicode, а следом идут четыре шестнадцатеричных числа. Вся эта область нам, конечно же, не нужна, потому что кроме букв, в нёй так же содержится ещё много других знаков и чисел, которые нас пока что не интересуют.
C#:
char value = '\u0025'; //знак %
char value2 = '\u0044'; // латинская буква D
Для указания юникод последовательности в языке c# используется управляющая последовательность символов \u.
Юникод запись, например ‘\u0025’ можно сократить, если использовать другую управляющую последовательность символов \x
C#:
char value = '\x25'; //знак %
char value2 = '\x44';//D
Выделенная область под латиницу занимает диапазон от \u0020 до \u007F (\x20 – \x7F). Этот основной диапазон, который кроме букв, так же содержит числа и символы (%, $, #), нам же нужен отрезок, который содержит только буквы латинского алфавита. Сразу хочу сказать, что буквы представлены, как в верхнем регистре, то есть все буквы от A до Z большие, так и в нижнем регистре, когда все буквы от a до z маленькие.
Область, выделенная под буквы верхнего регистра: от \x41 до \x5А
C#:
char value = '\x41'; //A
char value2 = '\x5А'; //Z
char value2 = '\u005A'; //Z
Шестнадцатеричная система не очень удобна для восприятия, поэтому переведем шестнадцатеричные коды в десятичную систему.
Как перевести число из шестнадцатеричной системы в десятичную
Сначала добавим строку: using System.Globalization;
Затем, берём шестнадцатеричный набор символов \x41, убираем первые два символа (\x) оставляем только 41, после чего используя метод parse, преобразуем строку в число.
C#:
string hex = "41"; //A
int dec = int.Parse(hex, NumberStyles.HexNumber); //65
C#:
string hex = "\x41"; //A
int.Parse(s.Substring(2), NumberStyles.HexNumber); //тоже самое 65
В результате преобразования получили число 65, если теперь подставить ‘\x5А’ и так же преобразовать строку в число, то получим число 90. Из этого следует, что диапазон от 65-90 — это и есть наш отрезок, в котором содержаться все латинские буквы в верхнем регистре, как видно ничего сложного.
Как перевести число в шестнадцатиричную систему
Обратный перевод dec в hex.
C#:
int dec = 65;
string hexValue = dec.ToString("X"); //41 ('\x41')
C#:
string hexValue = dec.ToString("X4"); //0041 ('\u0041')
В результате всех вычислений получаем следующую табличку:
Название | Символы | DEC | HEX |
Латиница | A..Z | 65..90 | 41..5A |
Латиница | a..z | 97..122 | 61..7A |
C#:
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();
}
C#:
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 |
В следующем примере показано, как получить все буквы русского алфавита от А до Я в верхнем регистре.
C#:
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 |
Читайте также: