Урок №35. Символьный тип данных char



Книга Урок №35. Символьный тип данных char

Хотя тип char является целочисленным типом данных (и, следовательно, подчиняется всем их правилам), его обработка немного отличается от работы с обычными целочисленными типами.

Тип данных char

1 байт выделяется для переменной типа char. Вместо преобразования значения char в целое число, оно расценивается как символ ASCII.

ASCII (American Standard Code for Information Interchange) is a standard code used for exchanging information, defining the way English characters (and a few others) are represented as numbers from 0 to 127. For example, the code for the letter 'a' is 97, and the code for the letter 'b' is 98. Characters are always enclosed in single quotes.

Таблица символов ASCII:

Использование символов от 0 до 31 преимущественно связано с форматированием вывода информации. Большинство из этих символов уже устарели и не рекомендуется их использовать.

Диапазон символов от 32 до 127 предназначен для отображения информации. В этот диапазон входят буквы, цифры, знаки препинания, которые широко применяются компьютерами для отображения текста на английском языке.

Два последующих выражения выполняют одно и то же действие (присваивают переменным типа char значение целого числа 97):

При работе с фактическими числами и числами, представляющими символы из ASCII-таблицы, необходимо быть осторожными. Два следующих утверждения имеют различное значение:

Вывод символов

При выводе переменных типа char, объект cout отображает символьные значения вместо числовых:

Итак, вот что у нас получилось:

a

Также возможно выводить символьные литералы напрямую:

Итак, вот что получилось:

b

Оператор static_cast

Для того чтобы отобразить символы в виде чисел, а не букв, необходимо указать cout выводить переменные типа char как целочисленные значения. Не самый эффективный способ сделать это - присвоить переменной типа int переменную типа char и вывести её:

Итак, вот что у нас получилось:

97

Один из наилучших методов - это преобразование переменной из одного типа данных в другой при помощи оператора static_cast.

Вот как выглядит синтаксис static_cast:

Функция static_cast принимает значение из (выражения) в качестве входных данных и преобразует его в выбранный вами <новый_тип_данных>.

Давайте рассмотрим применение оператора static_cast для преобразования типа char в тип int:

Вывод программы:

a
97
a

Не забывайте, что static_cast принимает (выражение) в качестве входных данных. Если мы используем переменную в (выражении), то эта переменная изменяет свой тип только в операторе static_cast. Процесс конвертации не влияет на исходную переменную и её значение! В приведенном выше примере переменная ch остается переменной типа char с прежним значением, что подтверждается последним оператором cout.

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

На будущем занятии мы рассмотрим более детально использование static_cast.

Ввод символов

В следующей программе пользователю предлагается ввести символ. После этого программа отображает введенный символ и соответствующий ему ASCII-код:

Результат работы программы:

Input a keyboard character: q
q has ASCII code 113

Обратите внимание, что даже если cin позволяет вводить несколько символов, переменная ch будет содержать только первый символ (именно он и сохраняется в переменной). Остальная часть пользовательского ввода останется во входном буфере, который использует cin, и будет доступна для использования в последующих вызовах cin.

Давайте рассмотрим это на деле:

Результат работы программы:

Input a keyboard character: abcd
a has ASCII code 97
b has ASCII code 98

Размер, диапазон и знак типа сhar

В языке программирования C++ для переменных типа char всегда отводится 1 байт. По умолчанию char может быть как со знаком, так и без (хотя обычно со знаком). Если вы используете char для хранения ASCII-символов, то указывать знак переменной необязательно (поскольку со знаком и без могут содержать значения от 0 до 127).

Если вы решите использовать тип char для хранения небольших целых чисел, то важно учитывать знак. Переменная типа char signed способна хранить числа в диапазоне от -128 до 127. В то время как переменная типа char unsigned может содержать значения от 0 до 255.

Управляющие символы

В C++ используются управляющие символы, также известные как "escape-последовательности". Они начинаются с обратного слэша (\), за которым следует определенная буква или цифра.

Самым часто используемым управляющим символом в языке программирования C++ является '
', который представляет собой символ перевода строки:

Итак, вот что получилось:

First line
Second line

Другим распространенным управляющим символом является символ \t, который заменяет нажатие клавиши TAB и добавляет большой отступ:

Итак, вот что у нас получилось:

The initial section        The subsequent part

Список всех специальных символов в языке программирования C++:

Давайте рассмотрим пример в программном коде:

Вывод программы:

"Here is a quote"

Within this sentence lies a lone backslash \

The hexadecimal representation of the character 'o' is 6F

Что использовать: ‘
’ или std::endl?

В последнем примере было замечено, что для перехода на новую строку использовался символ '
'. Однако, также можно было бы воспользоваться std::endl. В чем же разница между ними? Давайте разберемся прямо сейчас.

При работе с std::cout, информация для вывода может быть сохранена в буфере, что позволяет отложить отправку данных на вывод. Вместо этого std::cout может временно хранить данные (для оптимизации производительности).

И '
' и std::endl - это два способа перевода курсора на новую строку. Однако std::endl обеспечивает дополнительную гарантию того, что все данные из буфера будут выведены перед продолжением выполнения программы.

Когда лучше применять символ переноса строки '
', а когда - std::endl?

Для моментального вывода данных (например, при записи в файл или обновлении индикатора процесса) используйте std::endl. Следует отметить, что это может привести к небольшому снижению производительности, особенно если запись на устройство занимает много времени (например, запись файла на диск).

Для всех остальных случаев рекомендуется применять символ '
'.

Другие символьные типы: wchar_t, char16_t и char32_t

Использование типа wchar_t не рекомендуется практически всегда, за исключением ситуаций, когда необходимо взаимодействовать с Windows API.

Подобно тому, как стандарт ASCII использует целые числа для кодирования символов английского языка, другие кодировки также используют целые числа для представления символов различных языков. Один из самых известных стандартов (после ASCII) - Unicode, который включает в себя более 110 000 целых чисел для отображения символов из различных языков.

Существуют различные варианты кодировки Unicode:

В стандарте C++11 были введены типы char16_t и char32_t для работы с символами Unicode длиной 16 и 32 бит соответственно. Тип char уже поддерживает 8-битные символы.

В чём разница между одинарными и двойными кавычками при использовании с символами?

Как вы уже знаете, символы всегда заключаются в одинарные кавычки (например, 'а', '+', '5'). Переменная типа char содержит только один символ (например, буква а, символ +, число 5). Следующее утверждение некорректно:

Строка - это текст, заключенный в двойные кавычки (например, "Привет, мир!"). Тип данных string представляет собой последовательность символов.

Возможно использование строковых литералов в вашем коде:

На следующем занятии мы более детально рассмотрим тип данных string.
151   0  

Comments

    Ничего не найдено.