Проверка и преобразование символов
В ОС UNIX существуют два полезных набора макросов и функций для работы с символами, которые определены в файле stdio. Первый набор, называемый семейством сtype, предназначен для проверки одиночных символов. Эти макросы-предикаты возвращают true (истинно), если условие выполняется, и false (ложно) – в противном случае. Например, макрос isalpha проверяет, является ли символ буквой, то есть, лежит ли он в диапазонах a-z или A-Z:
uses stdio;
var
c:integer;
.
.
.
(* Макрос 'isalpha' из набора ctype *)
if isalpha (с) then
begin
(* Обрабатываем букву *)
end
else
warn('Символ не является буквой');
Обратите внимание на то, что аргумент с имеет тип integer. Ниже следует полный список макросов ctype:
isalpha(с) | Является ли с буквой? | ||
isupper(с) | Является ли с прописной буквой? | ||
islower(с) | Является ли с строчной буквой? | ||
isdigit(с) | Является ли с цифрой (0–9)? | ||
isxdigit(c) | Является ли с шестнадцатеричной цифрой? | ||
isalnum(c) | Является ли с буквой или цифрой? | ||
isspace(с) | Является ли с пробельным символом; то есть одним из символов: пробел, табуляция, возврат каретки, перевод строки, перевод страницы или вертикальная табуляция? | ||
ispunct(c) | Является ли с знаком препинания? | ||
isprint(с) | Является ли с печатаемым знаком? Для набора символов ASCII это означает любой символ в диапазоне от пробела (040) до тильды (~ или 0176) | ||
isgraph(с) | Является ли с печатаемым знаком, но не пробелом? | ||
iscntrl(с) | Является ли с управляющим символом? В качестве управляющего символа рассматривается символ удаления
ASCII и все символы со значением меньше 040 | ||
isascii(с) | Является ли с символом ASCII? Обратите внимание, что для любого целочисленного значения, кроме значения символа EOF, определенного в файле <stdio.h>, которое передается другим процедурам семейства ctype, это условие должно выполняться. (Включение символа EOF позволяет использовать макрокоманды из семейства ctype в процедурах типа getc) |
Другой набор утилит для работы с символами предназначен для простых преобразований символов. Например, функция tolower переводит прописную букву в строчную.
uses stdio;
var
newc, с:integer;
.
.
.
(* Перевод прописной буквы в строчную *)
(* Например, перевод буквы 'А' в 'а' *)
newc := tolower(с);
Если с
является прописной буквой, то она преобразуется в строчную, иначе возвращается исходный символ. Другие функции и макросы (которые могут быть объединены под заголовком conv в справочном руководстве системы) включают в себя:
toupper(с) |
Функция, преобразующая букву с в прописную, если она является строчной |
toascii(c) |
Макрос, преобразующий целое число в символ ASCII за счет отбрасывания лишних битов |
_toupper(с) |
Быстрая версия toupper, выполненная в виде макроса и не выполняющая проверки того, является ли символ строчной буквой |
_tolower(с) |
Быстрая версия tolower, выполненная в виде макроса, аналогичная макросу _toupper |