Лекции по проге / 11_Строки_Обработка
.pdf
Лекция №11.2 Строки: обработка
Представление строк в языке Си Представление многострочного текста Ввод-вывод строк Обработка строк
−Базовые операции над строками
−Перевод числа в строку и строки в число
−Разбиение строк
1
Обработка строк
В языке Си нет встроенных операций для работы со строками, но имеются библиотечные функции для обработки строк
2
Обработка строк (библиотека string.h)
strcmp() Сравнивает две строки (аналог операции ==) strncmp() Сравнивает части двух строк
strcat() Склеивает две строки (аналог операции +)
strncat() Добавляет к строке заданный символ
strchr() Находит первое вхождение в строку заданного символа
strrchr() Находит последнее вхождение заданного символа
strstr() Находит первое вхождение заданной строки
strcpy() Копирует одну строку в другую (аналог операции =)
strncpy() Копирует часть одной строки в другую
strlen() Определяет длину строки
strlwr() Переводит всю строку в нижний регистр
strupr() Переводит всю строку в верхний регистр
strnset() Создает строку из N заданных символов
strtok() Разбиение строки на подстроки
3
Обработка строк
(библиотеки string.h, tchar.h, stdio.h, ctype.h)
strсspn() |
Возвращает индекс первого символа строки, который |
|
принадлежит указанной последовательности символов |
||
|
||
strspn() |
Возвращает индекс первого символа строки, который не |
|
принадлежит указанной последовательности символов |
||
|
||
_strspnp() |
Возвращает подстроку (заданной строки), которая начинается |
|
|
с символа отсутствующего в другой строке |
|
_strrev() |
Переворачивает строку |
|
_memccpy() |
Копирует символы из одной строки в другую до заданного |
|
символа, но не более заданной длины |
||
memcpy() |
Копирует из одной строки в другую заданное кол-во символов |
|
isalpha() |
Проверяет, является ли символ буквой |
|
isalnum() |
Проверяет, является ли символ буквой или цифрой |
|
iscntrl() |
Проверяет, является ли символ управляющим |
|
islower() |
Проверяет, находится ли символ в нижнем регистре |
|
isupper() |
Проверяет, находится ли символ в верхнем регистре |
|
isspace() |
Проверяет, является ли символ разделителем |
4ispunct() Проверяет, является ли символ символом пунктуации
Принципы работы с библиотечными функциями
Хотя бы один параметр функции имеет тип char * или const char *, что позволяет передать в функцию всю строку или ее часть (подстроку)
Если параметр имеет префикс const, то функция анализирует содержимое строки, а если параметр без префикса, то функция изменяет строку
5
Принципы работы с библиотечными функциями
Функция может возвращать значение типа char *
В этом случае функция возвращает указатель либо на переданную ей строку, либо на отдельный символ этой строки
В любом случае, функция никогда не создает новую строку
6
Пример функции, анализирующей содержимое строк - сравнение строк
int strcmp(const char *str1, const char *str2);
только для чтения
Сравнивает две строки str1 и str2, возвращает
< 0 - str1 < str2, 0 - str1 = str2,
> 0 - str1 > str2
// Печатаем две фамилии в алфавитном порядке char FIO_1[31]= "Ivanov Roman";
char FIO_2[31]= "Ivanov Ivan";
if( strcmp(FIO_1, FIO_2) < 0 )
{ printf("%s\n%s", FIO_1, FIO_2); } else
7 { printf("%s\n%s", FIO_2, FIO_1); }
Ivanov Ivan
Ivanov Roman
Пример функции, изменяющей содержимое строки - копирование строки
char *strcpy(char *strDestination, |
|
|
|
|||||
|
строка- |
|||||||
|
|
|||||||
|
|
const char *strSource); |
|
приемник |
||||
|
|
|
||||||
|
|
|
|
|
|
|
|
для записи |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
указатель на строку-приемник |
|
только для чтения |
|
|
|||
Копирует содержимое строки strSource в строку strDestination
// Создаем копию строки
char |
str[]= |
"Example"; |
char |
copy[31]; |
|
strcpy(copy, str); |
||
puts(copy); |
Example |
|
8
Задание
По указанным прототипам определить, какая функция анализирует содержимое строк, а какая из них ― изменяет
char *strcat(char *, const char *);
char *strstr(const char *, const char *);
9
Пример функции, изменяющей содержимое строки ― склеивание строк
char *strcat(char *strDestination, const char *strSource);
Склеивает две строки strDestination и strSource, результат помещает в strDestination. Возвращает указатель на результирующую строку
// Склеиваем ФИО
char FIO[31]= ""; // склеивать можно только строки
char familyname[]= |
"Ivanov", name[]= "Ivan", |
|
patronymic[]= |
"Ivanovich"; |
|
strcat(FIO, familyname); strcat(FIO, " "); |
||
strcat(FIO, name); |
|
strcat(FIO, " "); |
strcat(FIO, patronymic); |
Ivanov Ivan Ivanovich |
|
10 puts(FIO); |
|
|
