3.2. Функции обработки символов и строк символов
В стандартной библиотеке Cесть следующие группы функций, оперирующих с символами и строками символов:
проверка символов и преобразование символов (раздел ctype.h);
преобразование строк в числовые данные и обратные преобразования (раздел stdlib.h);
операции над строками (раздел string.h);
операции над буферными областями (разделы string.hиmem.h).
Для функций определения класса символов, описанных в стандартной библиотеке, в качестве аргумента задаются значения типаint(проверяется только младший байт аргумента). Возвращаемое значение (типаint) равно0, если условие проверки не выполняется и отлично от нуля в противном случае. В разделе библиотекиctype.hопределены следующие функции:
Имя функции |
Действие функции |
isalnum |
Тест на символы A-Z,a-z,0-9. |
isalpha |
Тест на буквы A-Z,a-z. |
iscntrl |
Тест на управляющие символы с кодами 0x00–0x1fи0x7f. |
isdigit |
Тест на цифры 0-9. |
isgraph |
Тест на печатаемые символы, исключая пробел – 0x21 -0x7e. |
islower |
Тест на буквы a-z. |
isprint |
Тест на печатаемые символы – 0x20-0x7e. |
ispunct |
Тест на символы – знаки пунктуации. |
isspace |
Тест на символ пробела. |
isupper |
Тест на буквы A-Z. |
isxdigit |
Тест на шестнадцатеричную цифру – 0-9,A-F. |
Функция tolower()с аргументом типаintпроверяет, является ли аргумент прописной буквой и, если является, буква переводится в нижний регистр. В противном случае функция возвращает значение аргумента.
Функция toupper()с аргументом типаintпроверяет, является ли аргумент строчной буквой и, если является, буква переводится в верхний регистр. В противном случае функция возвращает значение аргумента.
Числа могут сохраняться как в форме строк, так и в форме цифр. Сохранение числа в виде строки означает сохранение цифровых символов. Например, число 213может быть сохранено в массиве символьной строки в виде цифр '2', '1', '3', '\0'. Сохранение числа213в цифровой форме означает сохранение его, например, в качестве значения типаint.
В языке Cцифровая форма требуется для выполнения таких цифровых операций, как сложение и сравнение, но отображение чисел на экране требует представления в форме строки, поскольку на экране отображаются символы. Функцииprintf()иscanf()с помощью своих спецификаций преобразуют цифровые формы в строковые и наоборот.
Преобразование строк в числа и чисел в строкивыполняется с помощью следующих функций, объявленных в разделеstdlib.h.
Прототип функции |
Действие функции |
double atof (char *string) |
Возвращает число с плавающей точкой типа doubleили0, если преобразование невозможно. |
int atoi (char *string) |
Возвращает целое число или 0, если преобразование невозможно. |
long atol (char *string) |
Возвращает целое число типа longили0, если преобразование невозможно. |
char *itoa (int value, char *string, int radix) |
Преобразует целое число, заданное в аргументе value, в строку символов*stringв системе счисленияradix(2 <radix < 36). |
char *ltoa ( long value, char *string, int radix) |
Аналогична функции itoa, но для длинных целых чисел. |
char *ultoa (unsigned long value, char *string, int radix) |
Аналогична функции itoa, но для длинных целых чисел без знака. |
Операции над строковыми переменными, определенные в разделеstring.hвключают следующие функции:
Прототип функции |
Действие функции |
char *strcat (char *string1, char *string2) |
Возвращает строку, являющуюся конкатенацией строк string1иstring2. |
char *strchr (char *string, int symbol) |
Возвращает указатель на первое вхождение symbolвstringилиNULL, еслиsymbolне найден вstring. |
int strcmp (char *string1, char *string2) |
Возвращает значение, большее 0, еслиstring1>string2, равное0, еслиstring1==string2и меньшее0, еслиstring1<string2. |
char *strcpy (char *string1, char *string2) |
Копирует string2вstring1и возвращаетstring1. |
int strcspn (char *string1, char *string2) |
Возвращает длину начальной подстроки string1, не содержащей ни одного символа изstring2. |
int strlen (char *string) |
Возвращает длину stringв байтах. |
char *strncat (char *string1, char *string2, n) |
Аналогична функции strcat(), но оперирует сnсимволами строкиstring2. |
int strncmp (char *string1, char *string2, n) |
Аналогична функции strcmp(), но оперирует с nсимволами строкиstring2. |
char *strncpy (char *string1, char *string2, n) |
Аналогична strcpy(), но оперирует сnсимволами строкиstring2. |
char *strset (char *string, int symbol) |
Возвращает строку string, заполненную символамиsymbol. |
char *strpbrk (char *string1, char *string2) |
Возвращает указатель на первое вхождение любого символа из string2вstring1илиNULL, если нет общих символов. |
char *strrchr (char *string, int symbol) |
Возвращает указатель на последнее вхождение symbolвstringилиNULL, если нет общих символов. |
int strspn (char *string1, char *string2) |
Возвращает длину начальной подстроки string1, которая содержит только символы изstring2. |
char *strstr (char *string1, char *string2) |
Возвращает указатель на первое вхождение строки string2вstring1илиNULL, если вхождение не найдено. |
char *strtok (char *string1, char *string2) |
При первом вызове функции для заданного значения параметра string1и строкиstring2, содержащей символы-разделители слов дляstring, производится возврат указателя на первый символstring1. Чтобы найти начало следующего слова вstring1, необходимо вызвать функцию со значениемNULLдляstring1. Когда все слова вstring1исчерпаны, возвращаетсяNULL. |