Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 11_Строки_Обработка

.pdf
Скачиваний:
30
Добавлен:
14.03.2016
Размер:
204.95 Кб
Скачать

Лекция №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);