Слайд 2
![Массивы символов в C++: обзор В C++ имеется специальный класс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-1.jpg)
Массивы символов в C++: обзор
В C++ имеется специальный класс для работы
со строками, которого, конечно, не было в языке С. В С строки вводились как массивы символов, ограниченные нуль-символом (ASCII-код которого равен нулю), поэтому большое количество программ, написанных на С, используют символьные массивы. Более того, и в C++, несмотря на то, что он имеет класс для работы со строками, находится применение массивам символов. Поэтому термин «строка» имеет два значения: строка в смысле C++ и строка как массив символов. Весь этот раздел будет посвящен тому, как нужно и не нужно использовать символьные массивы.
Слайд 3
![Все строки обязательно должны оканчиваться нуль-терминатором, и при объявлении размера](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-2.jpg)
Все строки обязательно должны оканчиваться нуль-терминатором, и при объявлении размера массива
необходимо это учитывать. Когда вы объявляете строковую переменную как массив символов, увеличьте размер массива на один символ для нуль-терминатора.
Все строки обязательно должны оканчиваться нуль-терминатором, и при объявлении размера массива необходимо это учитывать. Когда вы объявляете строковую переменную как массив символов, увеличьте размер массива на один символ для нуль-терминатора.
Слайд 4
![Ввод строк При вводе строк операция извлечения из потока >>](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-3.jpg)
Ввод строк
При вводе строк операция извлечения из потока >> не всегда
будет работать так, как вы ожидаете, поскольку строки часто содержат пробелы, которые игнорируются оператором ввода; поэтому вместо оператора ввода вам нужно использовать функцию getline. Эта функция вводит заданное количество символов.
Слайд 5
![Функция getline Пример #include int main() { char name[80]; cout](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-4.jpg)
Функция getline
Пример
#include
int main()
{
char name[80];
cout << "Enter your name: ";
cin.getline(name, sizeof(name)
- 1);
cout << "Hello " << name << ", how are you?";
return 0;
}
Слайд 6
![Присвоение значений строкам](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-5.jpg)
Присвоение значений строкам
Слайд 7
![Общий метод инициализации строки: char stringVar [stringSize] = stringLiteral; Пример](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-6.jpg)
Общий метод инициализации строки:
char stringVar [stringSize] = stringLiteral;
Пример
char aString[81]
= "Borland C++ 5 in 21 days";
char Name[] = "Rene Kinner";
Слайд 8
![Функция strcpy Прототип функции strcpy таков: char * strcpy(char *target,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-7.jpg)
Функция strcpy
Прототип функции strcpy таков:
char * strcpy(char *target, const char
*source);
Функция копирует строку source в строку target. Функция предполагает, что целевая строка имеет размер, достаточный для того, чтобы вместить содержимое строки-источника.
Пример
char name[41];
strcpy(nаmе, "Borland C++ 5");
Переменная name содержит строку "Borland C++ 5".
Слайд 9
![Функция strdup копирует одну строку в другую, при этом отводит](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-8.jpg)
Функция strdup копирует одну строку в другую, при этом отводит необходимое
количество памяти для целевой строки.
Функция strdup
Прототип функции strdup таков:
char* strdup( const char *source);
Функция копирует строку source и возвращает указатель на строку-копию.
Слайд 10
![Пример char *string1 = "Монархия в Испании"; char *string2; string2](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-9.jpg)
Пример
char *string1 = "Монархия в Испании";
char *string2;
string2 = strdup( string1);
После
того, как будет отведено необходимое количество памяти для строки string2, строка string1 будет скопирована в строку string2.
Так как функция strdup выделяет память для новой строки, вы должны не забыть освободить потом эту память.
Слайд 11
![Библиотека строковых функций предлагает также функцию strncpy, копирующую заданное количество](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-10.jpg)
Библиотека строковых функций предлагает также функцию strncpy, копирующую заданное количество символов
из одной строки в другую.
Функция strncpy
Прототип функции strncpy таков:
char * strncpy(char *target, const char *source, size_t num);
Функция копирует num символов из строки source в строку target. Функция не выполняет ни усечение, ни заполнение строки.
Слайд 12
![Пример char strl[] = "Pascal"; char str2[] = "Hello there";](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-11.jpg)
Пример
char strl[] = "Pascal";
char str2[] = "Hello there";
strcnpy(strl, str2, 5);
Переменная
strl содержит строку "Hellol". Заметьте, что символ ‘l’ строки-приемника, следующий за скопированной частью строки, сохранился.
Слайд 13
![Определение длины строки При работе со строками часто бывает нужно](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-12.jpg)
Определение длины строки
При работе со строками часто бывает нужно знать длину
строки. В STRING.Н объявляется функция strlen, возвращающая количество символов в строке, в которое не включается нуль-терминатор.
Функция strlen
Прототип функции strncpy таков:
size_t strlen(const char *string);
Функция strlen возвращает длину строки string.
size_t — это имя, приписанное типу unsigned int оператором typedef.
Слайд 14
![Пример char str[] = "1234567890"; size_t i; i = strlen(str); Переменной i будет присвоено значение 10.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-13.jpg)
Пример
char str[] = "1234567890";
size_t i;
i = strlen(str);
Переменной i будет
присвоено значение 10.
Слайд 15
![Конкатенация строк Операция конкатенации используется достаточно часто, когда новая строка](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-14.jpg)
Конкатенация строк
Операция конкатенации используется достаточно часто, когда новая строка получается объединением
двух или более строк. Присоединить одну строку к другой можно функцией strcat.
Конкатенация строк означает их последовательное присоединение друг к другу.
Слайд 16
![функция strcat Прототип функции strcat таков: char *strcat(char *target, const](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-15.jpg)
функция strcat
Прототип функции strcat таков:
char *strcat(char *target, const char *source);
Функция
добавляет к содержимому целевой строки содержимое строки-источника и возвращает указатель на целевую строку. Функция предполагает, что целевая строка может вместить содержимое объединенной строки.
Пример
char string[81];
strcpy(string, "Borland");
strcat(string, " C++ 5");
Переменная string содержит строку "Borland C++ 5”.
Слайд 17
![Функция strncat добавляет к содержимому целевой строки указанное количество символов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-16.jpg)
Функция strncat добавляет к содержимому целевой строки указанное количество символов из
строки-источника.
Функция strncat
Прототип функции strcat :
char *strncat(char *target, const char *source, size_t num);
Функция добавляет к содержимому целевой строки num символов из строки-источника и возвращает указатель на целевую строку.
Пример
char strl[81] = "Hello I am “;
char str2[41] = "Keith Thompson"; s
trncat(strl, str2, 5);
Переменная strl теперь содержит строку "Hello I am Keith .
Слайд 18
![Программа должна выполнять следующие задачи: □ Предлагает вам ввести строку;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-17.jpg)
Программа должна выполнять следующие задачи:
□ Предлагает вам ввести строку; ввод не должен
превышать 40 символов
□ Предлагает вам ввести вторую строку; ввод не должен превышать 40 символов
□ Выводит число символов, содержащихся в каждой строке
□ Присоединяет вторую строку к первой
□ Выводит результат конкатенации
□ Выводит длину объединенной строки
□ Предлагает вам ввести символ для поиска
□ Предлагает вам ввести символ для замены
□ Выводит содержимое объединенной строки после замены символа
Слайд 19
![Преобразование строк Заголовочный файл STRING.Н библиотеки работы со строками предлагает](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-18.jpg)
Преобразование строк
Заголовочный файл STRING.Н библиотеки работы со строками предлагает функции strlwr
и strupr для преобразования символов строк в нижний и верхний регистр соответственно.
Слайд 20
![Функция strlwr Прототип функции _strlwr: char* strlwr(char *source) Функция преобразует](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-19.jpg)
Функция strlwr
Прототип функции _strlwr:
char* strlwr(char *source)
Функция преобразует символы верхнего регистра в
символы нижнего регистра в строке source. Другие символы не затрагиваются. Функция возвращает указатель на строку source.
Пример
char str [ ] = "HELLO THERE";
_strlwr(str);
Переменная str теперь содержит строку "hello there".
Слайд 21
![Функция strupr Прототип функции strupr: char* strupr(char *source) Функция преобразует](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-20.jpg)
Функция strupr
Прототип функции strupr:
char* strupr(char *source)
Функция преобразует символы нижнего регистра
в символы верхнего регистра в строке source. Другие символы не затрагиваются. Функция возвращает указатель на строку source.
Пример
char str[] = " Borland C++ 5";
strupr(str);
Переменная str теперь содержит строку " BORLAND С ++ 5".
Слайд 22
![Обращение строк Библиотека STRING.Н предлагает функцию strrev для записи символов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-21.jpg)
Обращение строк
Библиотека STRING.Н предлагает функцию strrev для записи символов в строке
в обратном порядке.
Функция strrev
Прототип функции strrev:
char* strrev(char *str)
Функция обращает порядок символов в строке str и возвращает указатель на строку str.
char str[] = "Hello";
strrev(str) ;
cout << str;
Будет выведено "olleH".
Слайд 23
![Программа выполняет следующие задачи: □ Запрашивает у вас ввод строки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-22.jpg)
Программа выполняет следующие задачи:
□ Запрашивает у вас ввод строки
□ Отображает ваш ввод
□ Выводит вашу
строку в нижнем регистре
□ Выводит вашу строку в верхнем регистре
□ Отображает символы, которые вы ввели, в обратном порядке
Слайд 24
![Поиск символов Библиотека STRING.Н предлагает ряд функций для поиска символов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-23.jpg)
Поиск символов
Библиотека STRING.Н предлагает ряд функций для поиска символов в строках.
Это функции strchr, strrchr, strspn, strcspn и strpbrk. Они осуществляют поиск в строках символов и простых символьных шаблонов.
Слайд 25
![Функция strchr определяет первое вхождение символа в строку. Функция strchr](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-24.jpg)
Функция strchr определяет первое вхождение символа в строку.
Функция strchr
Прототип функции strchr:
char* strchr(const char *target, int c)
Функция находит первое вхождение символа с в строку target. Функция возвращает указатель на символ в строке target, который соответствует заданному образцу с. Если символ с в строке не обнаруживается, функция возвращает 0.
Слайд 26
![Пример char str[81] = "Borland C++ 5"; char *strPtr; strPtr](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-25.jpg)
Пример
char str[81] = "Borland C++ 5";
char *strPtr;
strPtr = strchr (str,
' +' );
Указатель strPtr теперь содержит адрес подстроки "++ 5 ’’ в строке str.
Слайд 27
![Функции strrchr определяет последнее вхождение символа н строке. Функция strrchr](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-26.jpg)
Функции strrchr определяет последнее вхождение символа н строке.
Функция strrchr
Прототип функции strrchr:
char*
strrchr(const char *target, int c)
Функция находит последнее вхождение символа с в строку target. Функция возвращает указатель на символ в строке target, который соответствует заданному образцу с. Если символ с в строке не обнаруживается, функция возвращает 0.
Слайд 28
![Пример char str[81] = "Borland C++ 5 is here"; char*](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-27.jpg)
Пример
char str[81] = "Borland C++ 5 is here";
char* strPtr;
strPtr =
strrchr(str, '+');
Указатель strPtr теперь указывает на подстроку "+ 5 is here " в строке str.
Слайд 29
![Функция strspn возвращает число символов с начала строки, совпадающих с](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-28.jpg)
Функция strspn возвращает число символов с начала строки, совпадающих с любым
символом из шаблона.
Функция strspn
Прототип для функции strspn:
size_t strspn(const char *target, const char *pattern);
Функция strspn возвращает число символов от начала строки target, совпадающих с любым символом из шаблона pattern.
Слайд 30
![Пример char str[] = "Borland C++ 5"; char substr[] =](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-29.jpg)
Пример
char str[] = "Borland C++ 5";
char substr[] = "narlBod ";
int index;
index = strspn(str, substr);
Этот оператор присваивает 8 переменной index, потому что первые восемь символов из str содержатся в подстроке substr.
Слайд 31
![Функция strcspn просматривает строку и выдает число первых символов в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-30.jpg)
Функция strcspn просматривает строку и выдает число первых символов в строке,
которые не содержатся в шаблоне.
Функция strcspn
Прототип функции strcspn:
size_t strcspn(const char* strl, const char* str2)
Функция strcspn просматривает строку str1 и выдает длину подстроки, отсчитываемой с начала строки, символы которой полностью отсутствуют в строке str2.
Слайд 32
![Пример char strng[] = "The rain in Spain"; int i](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-31.jpg)
Пример
char strng[] = "The rain in Spain";
int i ;
i =
strcspn(strng, " in");
Этот пример возвращает 3 (расположение первого пробела в строке strng) переменной i.
Слайд 33
![Функция strpbrk просматривает строку и определяет первое вхождение любого символа](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-32.jpg)
Функция strpbrk просматривает строку и определяет первое вхождение любого символа из
образца.
функция strpbrk
Прототип функции strpbrk:
char* strpbrk(const char* target, const char* pattern);
Функция strpbrk ищет в строке target первое вхождение любого символа из образца pattern. Если символы из образца не содержатся в строке, функция возвращает 0.
Слайд 34
![Пример char *str = "Hello there how are you"; char](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-33.jpg)
Пример
char *str = "Hello there how are you";
char *substr =
"hr";
char *ptr;
ptr = strpbrk(str, substr);
cout << ptr << endl;
Вы увидите на экране строку "here how are you", потому что ’h’ встречается в строке str раньше, чем ’r’.
Слайд 35
![Поиск строк](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-34.jpg)
Слайд 36
![Функция strstr Прототип функции strstr: char* strstr(const char *str, const](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/204585/slide-35.jpg)
Функция strstr
Прототип функции strstr:
char* strstr(const char *str, const char *substr);
Функция ищет
в строке str первое вхождение подстроки substr. Функция возвращает указатель на первый символ найденной в строке str подстроки substr. Если строка substr не обнаружена в строке str, функция возвращает 0.