Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
###Cpp_лкц1_1.09_11_#дляБАК#29_01_12.doc
Скачиваний:
67
Добавлен:
29.04.2019
Размер:
6.42 Mб
Скачать

92 Часть I. Структурное программирование

В заголовочных файлах <stdlib.h> и <cstdlib> содержатся полезные функции преобразования строк в числа (обратные преобразования можно сделать с помощью функции sprintf):

double atof(const char* p) преобразует переданную строку в double; int atoi (const char* p) преобразует переданную строку в int; long atol (const char* p) преобразует переданную строку в long.

Пробелы и табуляции в начале строки пропускаются. Преобразование прекращается при встрече недопустимого символа или конца строки. Если строку нельзя преобразовать в число, возвращается 0. Если число выходит за пределы диапазона данного типа, переменной еггпо (заголовочный файл <сеггпо>) присваивается значение ERANGE и возвращается допустимое число.

Пример (программа заполняет массив типа double из строки):

#include <stdio.h> #include <string.h> #include <stdlib.h> int main(){

char s[] = "2, 38.5, 70, 0, 0. Iй. *p = s;

double m[10];

int i = 0;

do{

m[i++] = atof(p); if (i>9)break;

}while(p = strchr(p, ','), p++);

for( int k = 0; k<i; k++) printf("X5.2f ", m[k]):

return 0;

}

Для работы с символами в стандартной библиотеке (заголовочные файлы <ctype. h> и <cctype>) есть следующие функции:

Имя

Проверка на принадлежность символа множеству

isalnum

букв и цифр (A-Z, a-z, 0-9)

isalfa

букв (A-Z, a-z)

iscntrl

управляющих символов (с кодами 0..31 и 127)

isdigit

цифр (0-9)

isgraph

печатаемых символов, кроме пробела (isalfa | isdigit | ispunct)

islower

букв нижнего регистра (a-z)

isprint

печатаемых символов

ispunct

знаков пунктуации

isspace

символов-разделителей

| isupper

букв верхнего регистра (A-Z)

| isxdigit

шестнадцатеричных цифр (A-F, a-f, 0-9)

Функции принимают величину типа int и возвращают значение true, если условие выполняется. Рекомендуется пользоваться стандартными функциями, а не

Глава 2. Модульное программирование 93

писать собственные циклы проверки, так как это снижает количество ошибок в программе.

Кроме описанных выше, в библиотеке есть функции tolower и toupper, переводящие символ латинского алфавита соответственно в нижний и верхний регистр.

Для каждой из перечисленных функций есть ее аналог для многобайтных символов типа wchar_t, содержащий в названии букву w. Эти функции также описаны в приложении 6.

Математические функции

C++ унаследовал из С стандартные математические функции, описание которых находится в заголовочных файлах <math.h> (<cmath>). Они позволяют получить абсолютное значение (abs, fabs), округленное число (ceil, floor), квадратный корень (sqrt), степень (pow), значения тригонометрических функций (sin, cos, tan, sinh, cosh, tanh, asin, acos, atan, atan2), экспоненту (ехр), логарифм (log, loglO), дробную и целую части числа (modf), остаток от деления (fmod) и другие.

Ошибки индицируются установкой еггпо из <errno.h> (<сеггпо>) в значение ED0M для ошибок, связанных с выходом из области определения, и ERANGE для ошибок выхода за пределы диапазона.

Директивы препроцессора

Препроцессором называется первая фаза компилятора. Инструкции препроцессора называются директивами. Они должны начинаться с символа #, перед которым в строке могут находиться только пробельные символы (с. 18).

Директива #include

Директива #include <имя_файла> вставляет содержимое указанного файла в ту точку исходного файла, где она записана. Включаемый файл также может содержать директивы #inc"lude. Поиск файла, если не указан полный путь, ведется в стандартных каталогах включаемых файлов. Вместо угловых скобок могут использоваться кавычки (" ") — в этом случае поиск файла ведется в каталоге, содержащем исходный файл, а затем уже в стандартных каталогах.

Директива #inc1ude является простейшим средством обеспечения согласованности объявлений в различных файлах, она включает в них информацию об интерфейсе из заголовочных файлов.

Заголовочные файлы обычно имеют расширение . h и могут содержать:

  • определения типов, констант, встроенных функций, шаблонов, перечислений;

  • объявления функций, данных, имен, шаблонов;

  • пространства имен;

  • директивы препроцессора;

  • комментарии.

94