Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

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

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

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

Добавлен: 13.12.2020

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

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

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

Глава 29. Функции для работы со строками <string.h> 

331 

Листинг 29.3. Соединение строк 

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

  char str1[80] = "String "; 
  char str2[] = "catenation "; 
  char str3[] = "Yes No"; 
 
  strcat(str1, str2); 
  printf("%s\n", str1);  /* печатает: String catenation */ 
  strncat( str1, str3, 3); 
  printf("%s\n", str1);  /* печатает: String catenation Yes */ 
 
  return 0; 

29.4. Поиск символа в строке 

Для  поиска  символа  в  строке  используются  функции 

strchr

strrchr

strspn

strcspn

 и 

strpbrk

Функция 

strchr

 имеет следующий прототип: 

  char* strchr(const char *str, int c); 

Эта  функция  ищет  первое  вхождение  символа,  заданного  пара-
метром 

c

, в строку 

str

. В случае успеха функция возвращает ука-

затель на первый найденный символ, а в случае неудачи — 

NULL

Функция 

strrchr

 имеет следующий прототип: 

  char* strrchr(const char *str, int c); 

Эта функция  ищет  последнее  вхождение  символа,  заданного  па-
раметром 

c

,  в  строку 

str

.  В  случае  успеха  функция  возвращает 

указатель на последний найденный символ, а в случае неудачи — 

NULL

В  листинге  29.4  приведен  пример  поиска  символа  в  строке  при 
помощи функций 

strchr

 и 

strrchr


background image

Часть III. Стандартная библиотека языка программирования C 

332 

Листинг 29.4. Поиск символа в строке 

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

  char str[80] = "Char search"; 
  printf("%s\n", strchr(str, 'r'));  /* печатает: r search */ 
  printf("%s\n", strrchr(str, 'r'));  /* печатает: rch */ 
 
  return 0; 

Функция 

strspn

 имеет следующий прототип: 

  size_t strspn(const char *str1, const char *str2); 

Эта функция возвращает индекс первого символа из строки 

str1

который не входит в строку 

str2

Функция 

strcspn

 имеет следующий прототип: 

  size_t strcspn(const char *str1, const char *str2); 

Эта функция возвращает индекс первого символа из строки 

str1

который входит в строку 

str2

В листинге 29.5 приведен пример поиска символов в строке при 
помощи функций 

strspn

 и 

strcspn

Листинг 29.5. Поиск символов в строке 

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

  char str[80] = "123 abc"; 
  printf("%d\n", strspn(str, "321"));  /* печатает: n = 3 */ 
  printf("%d\n", strcspn( str, "cba"));  /* печатает: n = 4 */ 
 
  return 0; 


background image

Глава 29. Функции для работы со строками <string.h> 

333 

Функция 

strpbrk

 имеет следующий прототип: 

  char* strpbrk(const char *str1, const char *str2); 

Эта  функция  находит  в  строке 

str1

  первый  символ,  который  

равен одному из символов в строке 

str2

. В случае успеха функ-

ция возвращает указатель на этот символ, а в случае неудачи — 

NULL

В  листинге  29.6  приведен  пример  использования  функции 

strpbrk

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

Листинг 29.6. Поиск символа в строке 

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

  char str[80] = "123 abc"; 
  printf("%s\n", strpbrk(str, "bca"));  /* печатает: abc */ 
 
  return 0; 

29.5. Поиск подстроки в строке 

Для поиска подстроки в строке используется функция 

strstr

, ко-

торая имеет следующий прототип: 

  char* strstr(const char *str1, const char *str2); 

Эта функция находит первое вхождение строки 

str2

 без конечно-

го  нулевого  байта  в  строку 

str1

.  В  случае  успеха  функция  воз-

вращает  указатель  на  найденную  подстроку,  а  в  случае  неуда-
чи — 

NULL

. Если указатель 

str1

 указывает на строку нулевой дли-

ны, то функция возвращает указатель 

str1

В листинге 29.7 приведен пример поиска подстроки в строке при 
помощи функции 

strstr


background image

Часть III. Стандартная библиотека языка программирования C 

334 

Листинг 29.7. Поиск подстроки в строке 

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

  char str[80] = "123 abc 456"; 
  printf("%s\n", strstr(str, "abc"));  /* печатает: abc 456 */ 
 
  return 0; 

29.6. Разбор строки на лексемы 

Для  разбора  строки  на  лексемы  используется  функция 

strtok

которая имеет следующий прототип: 

  char* strtok(char *str1, const char *str2); 

Эта  функция  возвращает  указатель  на  следующую  лексему  в 
строке 

str1

, в которой разделителями лексем являются символы 

из строки 

str2

. В случае если лексемы закончились, то функция 

strtok

  возвращает  значение 

NULL

.  При  первом  вызове  функции 

strtok

 параметр 

str1

 должен указывать на строку, которая разби-

рается  на  лексемы,  а  при  последующих  вызовах  этот  параметр 
должен  быть  установлен  в 

NULL

.  Функция 

strtok

  записывает  

в  строку 

str1

  после  найденной  лексемы  на  место  разделителя  

нулевой байт. 
В листинге 29.8 приведен пример разбора строки на лексемы при 
помощи функции 

strtok

Листинг 29.8. Разбор строки на лексемы 

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


background image

Глава 29. Функции для работы со строками <string.h> 

335 


  char  str[ ] = "12 34 ab cd"; 
  char *p; 
  p = strtok ( str, " " ); 
  while (p) 
  { 
    printf ( "%s\n", p );  /* печатает: 12 34 ab cd */ 
    p = strtok ( NULL, " " ); 
  } 
 
  return 0; 

29.7. Определение длины строки 

Для  определения  длины  строки  используется  функция 

strlen

которая имеет следующий прототип: 

  size_t strlen(const char *str); 

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

strlen

Листинг 29.9. Определение длины строки 

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

  char str[] = "123"; 
  printf ("%d\n", strlen(str));  /* печатает 3 */ 
 
  return 0; 


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