Эта статья требует дополнительных ссылок для проверки . ( октябрь 2011 г. ) ( Узнайте, как и когда удалить это сообщение-шаблон ) |
Стандартная библиотека C |
---|
Общие темы |
Разные заголовки |
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 ++).
Классификация оценивается в соответствии с действующим региональным стандартом.
Байтовый символ | Широкий характер | Описание |
---|---|---|
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 | преобразует операнд в верхний регистр |
N / A | iswctype | проверяет, попадает ли операнд в определенный класс |
N / A | towctrans | преобразует операнд, используя определенное отображение |
N / A | wctype | возвращает широкий класс символов, который будет использоваться с iswctype |
N / A | wctrans | возвращает преобразование преобразования, которое будет использоваться с towctrans |
Ссылки [ править ]
- ^ ISO / IEC 9899: 1999 спецификация (PDF) . п. 193, § 7.4.
Внешние ссылки [ править ]
В Wikibook A Little C Primer есть страница по теме: Библиотека тестирования классов символов C |
В Викиуке по программированию на C есть страница по теме: Программирование на C / Справочник по C |