Строки. Массивы символов в C++. Обзор. (Занятие 8)

Содержание

Слайд 2

Массивы символов в C++: обзор В C++ имеется специальный класс для

Массивы символов в C++: обзор
В C++ имеется специальный класс для работы

со строками, которого, конечно, не было в языке С. В С строки вводились как массивы символов, ограниченные нуль-символом (ASCII-код которого равен нулю), поэтому большое количество программ, написанных на С, используют символьные массивы. Более того, и в C++, несмотря на то, что он имеет класс для работы со строками, находится применение массивам символов. Поэтому термин «строка» имеет два значения: строка в смысле C++ и строка как массив символов. Весь этот раздел будет посвящен тому, как нужно и не нужно использовать символьные массивы.
Слайд 3

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

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

необходимо это учитывать. Когда вы объявляете строковую переменную как массив символов, увеличьте размер массива на один символ для нуль-терминатора.
Все строки обязательно должны оканчиваться нуль-терминатором, и при объявлении размера массива необходимо это учитывать. Когда вы объявляете строковую переменную как массив символов, увеличьте размер массива на один символ для нуль-терминатора.
Слайд 4

Ввод строк При вводе строк операция извлечения из потока >> не

Ввод строк
При вводе строк операция извлечения из потока >> не всегда

будет работать так, как вы ожидаете, поскольку строки часто содержат пробелы, которые игнорируются оператором ввода; поэтому вместо оператора ввода вам нужно использовать функцию getline. Эта функция вводит заданное количество символов.
Слайд 5

Функция getline Пример #include int main() { char name[80]; cout cin.getline(name,

Функция 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

Присвоение значений строкам

Присвоение значений строкам

Слайд 7

Общий метод инициализации строки: char stringVar [stringSize] = stringLiteral; Пример char

Общий метод инициализации строки:
char stringVar [stringSize] = stringLiteral;
Пример
char aString[81]

= "Borland C++ 5 in 21 days";
char Name[] = "Rene Kinner";
Слайд 8

Функция strcpy Прототип функции strcpy таков: char * strcpy(char *target, const

Функция 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 копирует одну строку в другую, при этом отводит необходимое

Функция strdup копирует одну строку в другую, при этом отводит необходимое

количество памяти для целевой строки.
Функция strdup
Прототип функции strdup таков:
char* strdup( const char *source);
Функция копирует строку source и возвращает указатель на строку-копию.
Слайд 10

Пример char *string1 = "Монархия в Испании"; char *string2; string2 =

Пример
char *string1 = "Монархия в Испании";
char *string2;
string2 = strdup( string1);
После

того, как будет отведено необходимое количество памяти для строки string2, строка string1 будет скопирована в строку string2.
Так как функция strdup выделяет память для новой строки, вы должны не забыть освободить потом эту память.
Слайд 11

Библиотека строковых функций предлагает также функцию strncpy, копирующую заданное количество символов

Библиотека строковых функций предлагает также функцию strncpy, копирующую заданное количество символов

из одной строки в другую.
Функция strncpy
Прототип функции strncpy таков:
char * strncpy(char *target, const char *source, size_t num);
Функция копирует num символов из строки source в строку target. Функция не выполняет ни усечение, ни заполнение строки.
Слайд 12

Пример char strl[] = "Pascal"; char str2[] = "Hello there"; strcnpy(strl,

Пример
char strl[] = "Pascal";
char str2[] = "Hello there";
strcnpy(strl, str2, 5);
Переменная

strl содержит строку "Hellol". Заметьте, что символ ‘l’ строки-приемника, следующий за скопированной частью строки, сохранился.
Слайд 13

Определение длины строки При работе со строками часто бывает нужно знать

Определение длины строки
При работе со строками часто бывает нужно знать длину

строки. В 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.

Пример
char str[] = "1234567890";
size_t i;
i = strlen(str);
Переменной i будет

присвоено значение 10.
Слайд 15

Конкатенация строк Операция конкатенации используется достаточно часто, когда новая строка получается

Конкатенация строк
Операция конкатенации используется достаточно часто, когда новая строка получается объединением

двух или более строк. Присоединить одну строку к другой можно функцией strcat.
Конкатенация строк означает их последовательное присоединение друг к другу.
Слайд 16

функция strcat Прототип функции strcat таков: char *strcat(char *target, const char

функция 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 добавляет к содержимому целевой строки указанное количество символов из

Функция 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

Программа должна выполнять следующие задачи: □ Предлагает вам ввести строку; ввод

Программа должна выполнять следующие задачи:
□ Предлагает вам ввести строку; ввод не должен

превышать 40 символов
□ Предлагает вам ввести вторую строку; ввод не должен превышать 40 символов
□ Выводит число символов, содержащихся в каждой строке
□ Присоединяет вторую строку к первой
□ Выводит результат конкатенации
□ Выводит длину объединенной строки
□ Предлагает вам ввести символ для поиска
□ Предлагает вам ввести символ для замены
□ Выводит содержимое объединенной строки после замены символа
Слайд 19

Преобразование строк Заголовочный файл STRING.Н библиотеки работы со строками предлагает функции

Преобразование строк
Заголовочный файл STRING.Н библиотеки работы со строками предлагает функции strlwr

и strupr для преобразования символов строк в нижний и верхний регистр соответственно.
Слайд 20

Функция strlwr Прототип функции _strlwr: char* strlwr(char *source) Функция преобразует символы

Функция strlwr
Прототип функции _strlwr:
char* strlwr(char *source)
Функция преобразует символы верхнего регистра в

символы нижнего регистра в строке source. Другие символы не затрагиваются. Функция возвращает указатель на строку source.
Пример
char str [ ] = "HELLO THERE";
_strlwr(str);
Переменная str теперь содержит строку "hello there".
Слайд 21

Функция strupr Прототип функции strupr: char* strupr(char *source) Функция преобразует символы

Функция strupr
Прототип функции strupr:
char* strupr(char *source)
Функция преобразует символы нижнего регистра

в символы верхнего регистра в строке source. Другие символы не затрагиваются. Функция возвращает указатель на строку source.
Пример
char str[] = " Borland C++ 5";
strupr(str);
Переменная str теперь содержит строку " BORLAND С ++ 5".
Слайд 22

Обращение строк Библиотека STRING.Н предлагает функцию strrev для записи символов в

Обращение строк
Библиотека STRING.Н предлагает функцию strrev для записи символов в строке

в обратном порядке.
Функция strrev
Прототип функции strrev:
char* strrev(char *str)
Функция обращает порядок символов в строке str и возвращает указатель на строку str.
char str[] = "Hello";
strrev(str) ;
cout << str;
Будет выведено "olleH".
Слайд 23

Программа выполняет следующие задачи: □ Запрашивает у вас ввод строки □

Программа выполняет следующие задачи:
□ Запрашивает у вас ввод строки
□ Отображает ваш ввод
□ Выводит вашу

строку в нижнем регистре
□ Выводит вашу строку в верхнем регистре
□ Отображает символы, которые вы ввели, в обратном порядке
Слайд 24

Поиск символов Библиотека STRING.Н предлагает ряд функций для поиска символов в

Поиск символов
Библиотека STRING.Н предлагает ряд функций для поиска символов в строках.

Это функции strchr, strrchr, strspn, strcspn и strpbrk. Они осуществляют поиск в строках символов и простых символьных шаблонов.
Слайд 25

Функция strchr определяет первое вхождение символа в строку. Функция strchr Прототип

Функция strchr определяет первое вхождение символа в строку.
Функция strchr
Прототип функции strchr:


char* strchr(const char *target, int c)
Функция находит первое вхождение символа с в строку target. Функция возвращает указатель на символ в строке target, который соответствует заданному образцу с. Если символ с в строке не обнаруживается, функция возвращает 0.
Слайд 26

Пример char str[81] = "Borland C++ 5"; char *strPtr; strPtr =

Пример
char str[81] = "Borland C++ 5";
char *strPtr;
strPtr = strchr (str,

' +' );
Указатель strPtr теперь содержит адрес подстроки "++ 5 ’’ в строке str.
Слайд 27

Функции strrchr определяет последнее вхождение символа н строке. Функция strrchr Прототип

Функции strrchr определяет последнее вхождение символа н строке.
Функция strrchr
Прототип функции strrchr:
char*

strrchr(const char *target, int c)
Функция находит последнее вхождение символа с в строку target. Функция возвращает указатель на символ в строке target, который соответствует заданному образцу с. Если символ с в строке не обнаруживается, функция возвращает 0.
Слайд 28

Пример char str[81] = "Borland C++ 5 is here"; char* strPtr;

Пример
char str[81] = "Borland C++ 5 is here";
char* strPtr;
strPtr =

strrchr(str, '+');
Указатель strPtr теперь указывает на подстроку "+ 5 is here " в строке str.
Слайд 29

Функция strspn возвращает число символов с начала строки, совпадающих с любым

Функция strspn возвращает число символов с начала строки, совпадающих с любым

символом из шаблона.
Функция strspn
Прототип для функции strspn:
size_t strspn(const char *target, const char *pattern);
Функция strspn возвращает число символов от начала строки target, совпадающих с любым символом из шаблона pattern.
Слайд 30

Пример char str[] = "Borland C++ 5"; char substr[] = "narlBod

Пример
char str[] = "Borland C++ 5";
char substr[] = "narlBod ";


int index;
index = strspn(str, substr);
Этот оператор присваивает 8 переменной index, потому что первые восемь символов из str содержатся в подстроке substr.
Слайд 31

Функция strcspn просматривает строку и выдает число первых символов в строке,

Функция strcspn просматривает строку и выдает число первых символов в строке,

которые не содержатся в шаблоне.
Функция strcspn
Прототип функции strcspn:
size_t strcspn(const char* strl, const char* str2)
Функция strcspn просматривает строку str1 и выдает длину подстроки, отсчитываемой с начала строки, символы которой полностью отсутствуют в строке str2.
Слайд 32

Пример char strng[] = "The rain in Spain"; int i ;

Пример
char strng[] = "The rain in Spain";
int i ;
i =

strcspn(strng, " in");
Этот пример возвращает 3 (расположение первого пробела в строке strng) переменной i.
Слайд 33

Функция strpbrk просматривает строку и определяет первое вхождение любого символа из

Функция strpbrk просматривает строку и определяет первое вхождение любого символа из

образца.
функция strpbrk
Прототип функции strpbrk:
char* strpbrk(const char* target, const char* pattern);
Функция strpbrk ищет в строке target первое вхождение любого символа из образца pattern. Если символы из образца не содержатся в строке, функция возвращает 0.
Слайд 34

Пример char *str = "Hello there how are you"; char *substr

Пример
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

Поиск строк

Поиск строк

Слайд 36

Функция strstr Прототип функции strstr: char* strstr(const char *str, const char

Функция strstr
Прототип функции strstr:
char* strstr(const char *str, const char *substr);
Функция ищет

в строке str первое вхождение подстроки substr. Функция возвращает указатель на первый символ найденной в строке str подстроки substr. Если строка substr не обнаружена в строке str, функция возвращает 0.