Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4151

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Часть 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

  возвратит  нену-

левое  значение  при  передаче ей  кода  этой  буквы  как  аргумента. 
Для  отображения  строчной  буквы  в  соответствующую  пропис-


background image

Глава 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 */ 

 


background image

  

 
 

Г Л А В А  

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

  

 


background image

Глава 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

 для копирования строк. 


background image

Часть 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

 для соединения строк. 


Смотрите также файлы