Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

История [ править ]

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

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

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

Реализация [ править ]

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

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

#define isdigit (x) (ТАБЛИЦА [x] & 1)

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

# определить isdigit (x) ((x)> = '0' && (x) <= '9')

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

Обзор функций [ править ]

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

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

Ссылки [ править ]

  1. ^ ISO / IEC 9899: 1999 спецификация (PDF) . п. 193, § 7.4.

Внешние ссылки [ править ]