ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.12.2020
Просмотров: 4293
Скачиваний: 28
Глава 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
.
Часть 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;
}
Глава 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
.
Часть 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()
Глава 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;
}