Язык программирования Си. Издание 3-е, исправленное — страница 62 из 69

Заголовочный файл объявляет функции, предназначенные для проверок символов. Аргумент каждой из них имеет тип int и должен либо представлять собой EOF, либо быть значением unsigned char, приведенным к int; возвращаемое значение тоже имеет тип int. Функции возвращают ненулевое значение ("истина"), когда аргумент c удовлетворяет описанному условию или принадлежит указанному классу символов, и нуль в противном случае.

isalnum(c)isalpha(c) или isdigit(c) есть истина
isalpha(c) isupper(c) или islower(c) есть истина
iscntrl(c) управляющий символ
isdigit(c)десятичная цифра
isgraph(c)печатаемый символ кроме пробела
islower(c)буква нижнего регистра
isprint(c)печатаемый символ, включая пробел
ispunct(c)печатаемый символ кроме пробела, буквы или цифры
isspace(c)пробел, смена страницы, новая строка, возврат каретки, табуляция, вертикальная табуляция
isupper(c)буква верхнего регистра
isxdigit(c) шестнадцатеричная цифра

В наборе семибитовых ASCII-символов печатаемые символы находятся в диапазоне от 0x20 (' ') до 0x7E ('~'); управляющие символы - от 0 (NUL) до 0x1F (US) и 0x7F (DEL).

Помимо перечисленных есть две функции, приводящие буквы к одному из регистров:

int tolower(int c) – переводит c на нижний регистр; 

int toupper(int c) - переводит c на верхний регистр.

Если c - буква на верхнем регистре, то tolower(c) выдаст эту букву на нижнем регистре; в противном случае она вернет c. Если c - буква на нижнем регистре, то toupper(c) выдаст эту букву на верхнем регистре; в противном случае она вернет c.

B3. Функции, оперирующие со строками:

Имеются две группы функций, оперирующих со строками. Они определены в заголовочном файле . Имена функций первой группы начинаются с букв str, второй - с mem. Если копирование имеет дело с объектами, перекрывающимися по памяти, то, за исключением memmove, поведение функций не определено. Функции сравнения рассматривают аргументы как массивы элементов типа unsigned char.

В таблице на с. 321 переменные s и t принадлежат типу char *, cs и ct – типу const char *, n - типу size_t, а c - значение типа int, приведенное к типу char.

Последовательные вызовы strtok разбивают строку s на лексемы. Ограничителем лексемы служит любой символ из строки ct. В первом вызове указатель s не равен NULL. Функция находит в строке s первую лексему, состоящую из символов, не входящих в ct; ее работа заканчивается тем, что поверх следующего символа пишется '\0' и возвращается указатель на лексему. Каждый последующий вызов, в котором указатель s равен NULL, возвращает указатель на следующую лексему, которую функция будет искать сразу за концом предыдущей. Функция strtok возвращает NULL, если далее никакой лексемы не обнаружено. Параметр ct от вызова к вызову может варьироваться.

Здесь и ниже под такими выражениями как cscs меньше (больше) ct, если первый несовпавший элемент в cs арифметически меньше (больше) соответствующего элемента из ct.— Примеч. ред.

char *strcpy(s,ct) копирует строку ct в строку s, включая '\0'; возвращает s
char *strncpy(s,ct,n) копирует не более n символов строки ct в s; возвращает s. Дополняет результат символами '\0', если символов в ct меньше n
char *strcat(s,ct) приписывает ct к s; возвращает s
char *strncat(s,ct,n) приписывает не более n символов ct к s, завершая s символом '\0'; возвращает s
char strcmp(cs,st) сравнивает cs и ct; возвращает <0, если cs0, если cs>ct (I.B.: вообще-то, функция возвращает int)
char strncmp(cs,ct) сравнивает не более n символов cs и ct; возвращает <0, если cs0, если cs>ct (I.B.: тоже int должна возвращать)
char *strchr(cs,c) возвращает указатель на первое вхождение c в cs или, если такового не оказалось, NULL
char *strrchr(cs,c) возвращает указатель на последнее вхождение c в cs или, если такового не оказалось, NULL
size_t strspn(cs,ct) возвращает длину начального сегмента cs, состоящего из символов, входящих в строку ct
size_t strcspn(cs,ct) возвращает длину начального сегмента cs, состоящего из символов, не входящих в строку ct
char *strpbrk(cs,ct) возвращает указатель в cs на первый символ, который совпал с одним из символов, входящих в ct, или, если такового не оказалось, NULL
char *strstr(cs, ct) возвращает указатель на первое вхождение ct в cs или, если такового не оказалось, NULL
size_t strlen(cs) возвращает длину cs
char * strerror(n) возвращает указатель на зависящую от реализации строку, соответствующую номеру ошибки n
char * strtok(s, ct) strtok ищет в s лексему, ограниченную символами из ct; более подробное описание этой функции см. ниже

Функции mem... предназначены для манипулирования с объектами как с массивами символов; их назначение - получить интерфейсы к эффективным программам. В приведенной ниже таблице s и t принадлежат типу void *; cs и ct - типу const void *; n - типу size_t; а c имеет значение типа int, приведенное к типу char.

void *memcpy(s,ct, n) копирует n символов из ct в s и возвращает s
void *memmove(s,ct,n) делает то же самое, что и memcpy, но работает и в случае "перекрывающихся" объектов.
int memcmp(cs, ct, n) сравнивает первые n символов cs и ct; выдает тот же результат, что и функция strcmp
void *memchr(cs, c, n) возвращает указатель на первое вхождение символа c в cs или, если среди первых n символов c не встретилось, NULL
void *memset(s, c, n) размещает символ c в первых n позициях строки s и возвращает s

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

В заголовочном файле описываются математические функции и определяются макросы.

Макросы EDOM и ERANGE (находящиеся в ) задают отличные от нуля целочисленные константы, используемые для фиксации ошибки области и ошибки диапазона; HUGE_VAL определена как положительное значение типа double. Ошибка области возникает, если аргумент выходит за область значений, для которой определена функция. Фиксация ошибки области осуществляется присвоением errno значения EDOM; возвращаемое значение зависит от реализации. Ошибка диапазона возникает тогда, когда результат функции не может быть представлен в виде double. В случае переполнения функция возвращает HUGE_VAL с правильным знаком и в errno устанавливается значение ERANGE. Если результат оказывается меньше, чем возможно представить данным типом, функция возвращает нуль, а устанавливается ли в этом случае errno в ERANGE, зависит от реализации. Далее x и y имеют тип double, n - тип int, и все функции возвращают значения типа double. Углы в тригонометрических функциях задаются в радианах.

sin(x) синус x
cos(x)косинус x
tan(x) тангенс