Системное программирование в UNIX средствами Free Pascal

       

Проверка и преобразование символов


В ОС 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


Содержание раздела