Jump to content

Классификация символов C

Классификация символов C — это операция, предоставляемая группой функций стандартной библиотеки ANSI C для языка программирования C. Эти функции используются для проверки символов на принадлежность к определенному классу символов, например, буквенные символы, управляющие символы и т. д. Поддерживаются как однобайтовые, так и широкие символы. [1]

Первые программисты языка C, работавшие над операционной системой Unix, разработали идиомы программирования для классификации символов по различным типам. Например, для набора символов ASCII следующее выражение идентифицирует букву, если ее значение истинно :

('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')

Поскольку это может быть выражено в нескольких формулировках, стало желательным ввести короткие стандартизированные формы таких тестов, которые были бы помещены в общесистемный заголовочный файл ctype.h .

Выполнение

[ редактировать ]

В отличие от приведенного выше примера, процедуры классификации символов не написаны как сравнительные тесты. В большинстве библиотек C они написаны как поиск по статическим таблицам, а не как макросы или функции.

Например, создается массив из 256 восьмибитных целых чисел, организованных в виде битовых полей, где каждый бит соответствует определенному свойству символа, например, isdigit, isalpha. Если младший бит целых чисел соответствует свойству isdigit, код можно записать как

#define isdigit(x) (TABLE[x] & 1)

Ранние версии Linux использовали потенциально ошибочный метод, аналогичный первому примеру кода:

#define isdigit(x) ((x) >= '0' && (x) <= '9')

Это может вызвать проблемы, если при раскрытии макроса выражение, замененное на x, будет иметь побочный эффект . Например, если кто-то вызывает isdigit(x++) или isdigit(run_some_program()) . Не сразу очевидно, что аргумент isdigit вычисляется дважды. По этой причине обычно используется табличный подход.

Обзор функций

[ редактировать ]

Функции, работающие с однобайтовыми символами, определены в ctype.h заголовочном файле ( cctype в C++). Функции, работающие с широкими символами, определены в wctype.h заголовочном файле ( cwctype в C++).

Классификация оценивается в соответствии с действующим языковым стандартом.

Байт
характер
Широкий
характер
Описание
isalnum iswalnum проверяет, является ли операнд буквенно-цифровым
isalpha iswalpha проверяет, является ли операнд алфавитным
islower iswlower проверяет, является ли операнд строчной буквой
isupper iswupper проверяет, является ли операнд заглавной буквой
isdigit iswdigit проверяет, является ли операнд цифрой
isxdigit iswxdigit проверяет, является ли операнд шестнадцатеричным
iscntrl iswcntrl проверяет, является ли операнд управляющим символом
isgraph iswgraph проверяет, является ли операнд графическим символом
isspace iswspace проверяет, является ли операнд пробелом
isblank iswblank проверяет, является ли операнд символом пробела
isprint iswprint проверяет, является ли операнд печатным символом
ispunct iswpunct проверяет, является ли операнд знаком пунктуации
tolower towlower преобразует операнд в нижний регистр
toupper towupper преобразует операнд в верхний регистр
iswctype проверяет, попадает ли операнд в определенный класс
towctrans преобразует операнд, используя определенное сопоставление
wctype возвращает класс широких символов, который будет использоваться с iswctype
wctrans возвращает преобразование, которое будет использоваться с towctrans
  1. ^ Спецификация ISO/IEC 9899:1999 (PDF) . п. 193, § 7.4.
[ редактировать ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f0cc46b0f2746f2c06ca2105546babbe__1665356640
URL1:https://arc.ask3.ru/arc/aa/f0/be/f0cc46b0f2746f2c06ca2105546babbe.html
Заголовок, (Title) документа по адресу, URL1:
C character classification - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)