Символы – это строительные блоки строк. В системе письма всё называется символом: буквы алфавитов, цифры, знаки препинания, символ пробела и т.д. Несколько добавляет путаницы тот факт, что строительные блоки самих символов также называются символами.
Целочисленное значение буквы a в нижнем регистре равно 97, а целочисленное значение цифры 1 равно 49. Эти значения были назначены просто по соглашениям, при разработке таблицы ASCII.
В следующей таблице указаны стандартные символьные типы с размерами занимаемой ими памяти и целями.
Символы представлены типом char, который может содержать только 256 различных значений. Если вы знакомы с типом char по другим языкам, вы, возможно, уже знаете, что его размера недостаточно для поддержки букв большого количества систем письменности.
Тип | Занимаемый размер | Цель |
---|---|---|
char | 1 байт | кодовый блок UTF-8 |
wchar | 2 байта | кодовый блок UTF-16 |
dchar | 4 байта | кодовый блок UTF-32 и кодовая точка Unicode |
Ниже перечислены некоторые полезные функции, работающие с символами:
isLower − Определяет, является ли строчным символом.
isUpper − Определяет, является ли символом верхнего регистра.
isAlpha − Определяет, является ли алфавитно-цифровым символом Юникода (как правило, буквой или цифрой).
isWhite − Определяет, является ли пробельным символом.
toLower − Возвращает данный символ в нижнем регистре.
toUpper − Возвращает данный символ в верхнем регистре.
import std.stdio; import std.uni; void main() { writeln("ğ - строчная буква? ", isLower('ğ')); writeln("Ş - строчная буква? ", isLower('Ş')); writeln("İ - прописная буква? ", isUpper('İ')); writeln("ç - прописная буква? ", isUpper('ç')); writeln("z - это алфавино-цифровой символ? ", isAlpha('z')); writeln("Перевод строки является пробельным символом? ", isWhite('\n')); writeln("Нижнее подчёркивание является пробельным символом? ", isWhite('_')); writeln("Буква Ğ в нижнем регистре: ", toLower('Ğ')); writeln("Буква İ в нижнем регистре: ", toLower('İ')); writeln("Буква ş в верхнем регистре: ", toUpper('ş')); writeln("Буква ı в верхнем регистре: ", toUpper('ı')); }
Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:
ğ - строчная буква? true Ş - строчная буква? false İ - прописная буква? true ç - прописная буква? false z - это алфавино-цифровой символ? true Перевод строки является пробельным символом? true Нижнее подчёркивание является пробельным символом? false Буква Ğ в нижнем регистре: ğ Буква İ в нижнем регистре: i Буква ş в верхнем регистре: Ş Буква ı в верхнем регистре: I
Мы можем читать символы, используя readf, как показано ниже.
readf(" %s", &letter);
Поскольку программирование на D поддерживает Юникод, то чтобы читать символы Юникода, нам нужно прочитывать дважды и записывать дважды, чтобы получить ожидаемый результат. Это не работает в онлайн-компиляторе. Пример показан ниже.
import std.stdio; void main() { char firstCode; char secondCode; write("Пожалуйста, введите букву: "); readf(" %s", &firstCode); readf(" %s", &secondCode); writeln("Буква, которая была прочитана: ", firstCode, secondCode); }
Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:
Пожалуйста, введите букву: ğ Буква, которая была прочитана: ğ
Что-то нормально у меня эта программа так и не заработала. Возможно, в Linux было бы больше толку – прим. пер.