Скачиваний:
56
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

12.5.2. Преобразование строк в числовые значения

Стандарт ANSI С определяет два набора функций для преобразования строк в числовые величины:

Описание

uses sysutils;

(* Преобразование строки в целое число *)

Function StrToInt(const s:string):integer;

Function StrToIntDef(const S:string; Default:integer):integer;

function strtol(const str:pchar; endptr:ppchar; base:longint):longint;

function atoi(const str:pchar):longint;

function atol(const str:pchar):longint;

(* Преобразование строки в вещественное число *)

function strtod(const str:pchar; endptr:ppchar):double;

function atof(const str:pchar):double;

Функции StrToInt и StrToIntDef преобразуют строку в целое число. Если строка содержит нецифровые символы или имеет неверный формат, StrToInt генерирует исключение EConvertError, а StrToIntDef возвращает значение, определенное параметром Default.

Функции atoi, atol и atof преобразуют строку числовой константы в число формата longint и double соответственно. В настоящее время эти функции устарели и заменены функциями strtol и strtod.

Функции strtod и strtol намного более надежны. Обе функции удаляют все пробельные символы из начала строки str и все нераспознанные символы в конце строки (включая нулевой символ) и записывают указатель на полученную строку в переменную endptr, если значение аргумента endptr не равно нулю. Последний параметр функции strtol – base может иметь любое значение между 0 и 36, при этом строка конвертируется в целое число с основанием base.

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

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

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal