ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4294
Скачиваний: 28
Часть III. Стандартная библиотека языка программирования C
326
Например:
int n;
char s[] = "aB, 12\n";
n = isalnum(s[5]); /* n > 0 */
n = isalpha(s[0]); /* n > 0 */
n = isupper(s[1]); /* n > 0 */
n = islower(s[0]); /* n > 0 */
n = iscntrl(s[6]); /* n > 0 */
n = isdigit(s[4]); /* n > 0 */
n = isxdigit(s[1]); /* n > 0 */
n = isspace(s[3]); /* n > 0 */
n = ispunct(s[2]); /* n > 0 */
n = isprint(s[3]); /* n > 0 */
n = isgraph(s[3]); /* n = 0 */
Здесь все функции определения типа символа, за исключением
функции
isgraph
, возвращают положительные значения, которые
зависят от реализации. Функция
isgraph
возвращает нулевое зна-
чение.
28.2. Отображения прописных и
строчных символов
Буква является прописной, если функция
isupper
возвратит нену-
левое значение при передаче ей кода этой буквы как аргумента.
Для отображения прописной буквы в соответствующую строч-
ную букву предназначена функция
tolower
, которая имеет сле-
дующий прототип:
int tolower(int c);
Если параметр
c
является кодом прописной буквы, то функция
tolower
возвращает код соответствующей строчной буквы, в про-
тивном случае — значение параметра
c
.
Буква является строчной, если функция
islower
возвратит нену-
левое значение при передаче ей кода этой буквы как аргумента.
Для отображения строчной буквы в соответствующую пропис-
Глава 28. Функции классификации символов <ctype.h>
327
ную букву предназначена функция
toupper
, которая имеет сле-
дующий прототип:
int toupper(int c);
Если параметр
c
является кодом строчной буквы, то функция
tolower
возвращает код соответствующей прописной буквы,
в противном случае — значение параметра
c
. Например:
char a = 'A';
char b = 'b';
printf("%c %c\n", tolower(a), toupper(b)); /* a B */
Г Л А В А
29
Функции для работы
со строками <string.h>
Кроме функций для работы со строками в заголовочном файле
string.h также объявлен тип
size_t
и макрос
NULL
. Их описание
было приведено в
гл. 20
.
29.1. Сравнение строк
Для сравнения строк используются функции
strcmp
и
strncmp
.
Функция
strcmp
имеет следующий прототип:
int strcmp(const char *str1, const char *str2);
Эта функция лексикографически сравнивает строки
str1
и
str2
и
возвращает отрицательное, нулевое или положительное значение,
если строка
str1
соответственно меньше, равна или больше стро-
ки
str2
.
Функция
strncmp
имеет следующий прототип:
int strncmp(const char *str1, const char *str2, size_t n);
Эта функция лексикографически сравнивает не более чем
n
пер-
вых символов из строк
str1
и
str2
. Функция возвращает отрица-
тельное, нулевое или положительное значение, если первые
n
символов из строки
str1
соответственно меньше, равны или
больше первых
n
символов из строки
str2
.
В листинге 29.1 приведен пример сравнения строк при помощи
функций
strcmp
и
strncmp
.
Глава 29. Функции для работы со строками <string.h>
329
Листинг 29.1. Сравнение строк
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "aa bb";
char str2[] = "aa aa";
char str3[] = "aa bb cc";
printf("%d\n", strcmp(str1, str3)); /* печатает: -1 */
printf("%d\n", strcmp(str1, str1)); /* печатает: 0 */
printf("%d\n", strcmp(str1, str2)); /* печатает: 1 */
printf("%d\n", strncmp(str1, str3, 5)); /* печатает: 0 */
return 0;
}
29.2. Копирование строк
Для копирования строк используются функции
strcpy
и
strncpy
.
Функция
strcpy
имеет следующий прототип:
char *strcpy(char *strDst, const char *strSrc);
Эта функция копирует строку
strSrc
в строку
strDst
. Строка
strSrc
копируется полностью, включая завершающий нулевой
байт. Функция возвращает указатель на строку
strDst
. Если стро-
ки перекрываются, то результат работы функции непредсказуем.
Функция
strncpy
имеет следующий прототип:
char *strncpy(char *strDst, const char *strSrc, size_t n );
Эта функция копирует
n
символов из строки
strSrc
в строку
strDst
. Если строка
strSrc
содержит меньше чем
n
символов, то
последний нулевой байт копируется столько раз, сколько нужно
для расширения строки
strSrc
до
n
символов. Функция возвраща-
ет указатель на строку
strDst
.
В листинге 29.2 приведен пример использования функций
strcpy
и
strncpy
для копирования строк.
Часть III. Стандартная библиотека языка программирования C
330
Листинг 29.2. Копирование строк
#include <stdio.h>
#include <string.h>
int main()
{
char str1[80];
char str2[] = "Copy string.";
strcpy(str1, str2);
printf(str1); /* печатает: Copy string. */
return 0;
}
29.3. Соединение строк
Для соединения двух строк в одну строку используются функции
strcat
и
strncat
.
Функция
strcat
имеет следующий прототип:
char* strcat(char *strDst, const char *strSrc);
Эта функция присоединяет строку
strSrc
к строке
strDst
, причем
завершающий нулевой байт строки
strDst
стирается. Функция
возвращает указатель на строку
strDst
.
Функция
strncat
имеет следующий прототип:
char* strncat(char *strDst, const char *strSrc, size_t n);
Эта функция присоединяет
n
символов из строки
strSrc
к строке
strDst
, причем завершающий нулевой байт строки
strDst
стира-
ется. Если длина строки
strSrc
меньше
n
, то присоединяются
только символы, входящие в строку
strSrc
. После соединения
строк к строке
strDst
всегда добавляется нулевой байт. Функция
возвращает указатель на строку
strDst
.
В листинге 29.3 приведен пример использования функций
strcat
и
strncat
для соединения строк.