Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задание 5_I.doc
Скачиваний:
2
Добавлен:
17.09.2019
Размер:
153.6 Кб
Скачать

Кафедра Компьютерных методов физики: программирование, первый курс, второй семестр

Язык программирования C++

Иванов А.П., Князева О.С.

Семинар 7. Строковые классы C++. Потоки ввода-вывода. Обработка исключений.

  1. Строковые классы C++

Строковый шаблонный класс STL и его наиболее употребимые специализации (инстанцирования) определены в заголовочном файле <string>. Предназначен этот класс, главным образом, для удобной работы с текстовыми строками, однако, так как этот класс шаблонный – он может использоваться и для реализации строк, состоящих не только из символов типа char.

Конечно, что-то похожее можно было бы реализовать и на основе vector<char>, однако, реализация отдельного шаблона позволила решить следующие задачи:

  • расширенный набор функций, аналоги которых были определены в языке C: поиск, сравнение, копирование строк и т.п.;

  • более экономная реализация, позволяющая избежать лишних копирований и аллокаций памяти по сравнению с классом vector (тактика copy-on-write).

Основной шаблонный класс, в котором сосредоточена вся функциональность:

template <

class CharType,

class Traits=char_traits<CharType>,

class Allocator=allocator<CharType>

>

class basic_string;

Важнейший параметр шаблона – первый, он определяет, какой тип будет сохраняться в данном контейнере. Два других параметра имеют значения по умолчанию и, как правило, задаются явно только в очень специальных случаях.

Определения производных типов (специализация)

string

специализация basic_string<char>, представляющая собой строку из обычных символов.

wstring

специализация basic_string<wchar_t>, представляющая собой строку из обычных символов в двухбайтовой кодировке Unicode.

Операторы

Часть операторов реализована как внеклассовые шаблонные функции, а другая часть – как члены класса basic_string.

operator[]

Возвращает ссылку (которой можно присваивать значение) на символ строки, имеющий указанный номер по порядку от начала.

operator=

Оператор присваивания строке, имеет несколько разных реализаций по типу аргумента: присваивание другой строки, одиночного символа и ли строки языка C типа char*.

operator+

operator+=

Добавление второй строки в конец первой. Аналогично оператору присваивания – допускает аргументы разных типов (C++ строка, C строка, одиночный символ).

operator!=

operator==

operator<

operator<=

operator>

operator>=

Операторы сравнения двух строк.

operator<<

operator>>

Операторы ввода и вывода строки в поток (например, cin или cout).

Отдельная функция

getline

Позволяет читать входной поток (такой, как cin) построчно, присваивает очередную считанную строку указанной переменной:

string s1;

cout << "Enter a sentence:" << endl << flush;

getline(cin,s1);

Определения типов, встроенные в класс

iterator

const_iterator

Аналогично прочим STL-контейнерам, со строкой можно оперировать при помощи итераторов (обобщения указателей).

npos

Специальный тип (эквивалентный целочисленной «минус единице»), предназначенный для сигнализации о неуспехе поиска в строке.

Конструкторы

basic_string

Конструкторы, в зависимости от типа своего аргумента позволяют создать строку из строки C, другой C++ строки, одиночного символа или заданного их количества, а также – создать пустую строку.

Member Functions

size

length

empty

resize

Returns the current number of elements in a string.

Tests whether the string is contains characters or not.

Specifies a new size for a string, appending or erasing elements as required.

reserve

capacity

Sets the capacity of the string to a number at least as great as a specified number.

Returns the largest number of elements that could be stored in a string without increasing the memory allocation of the string.

assign

append

Аналогично operator= и operator+= присваивают или дописывают в конец данной строки – другую строку, однако, в отличие от соответствующих операторов, содержат по нескольку вариантов с дополнительными аргументами, позволяющими выполнить копирование только части строки.

at

Аналогично operator[] возвращает ссылку на символ строки с заданным номером, однако, в отличие от него выполняет строгую проверку индекса на попадание в диапазон допустимых значений и выбрасывает exception (см. ниже) в случае неуспеха.

begin

end

Returns an iterator addressing the first element in the string.

c_str

data

Converts the contents of a string as a C-style, null-terminated, string.

erase

clear

Erases all elements of a string.

Removes an element or a range of elements in a string from a specified position.

compare

Compares a string with a specified string to determine if the two strings are equal or if one is lexicographically less than the other.

copy

Copies at most a specified number of characters from an indexed position in a source string to a target character array. Deprecated. Use basic_string::_Copy_s instead.

insert

Inserts an element or a number of elements or a range of elements into the string at a specified position.

push_back

Adds an element to the end of the string.

replace

Replaces elements in a string at a specified position with specified characters or characters copied from other ranges or strings or C-strings.

substr

Copies a substring of at most some number of characters from a string beginning from a specified position.

find

Searches a string in a forward direction for the first occurrence of a substring that matches a specified sequence of characters.

find_first_not_of

Searches through a string for the first character that is not any element of a specified string.

find_first_of

Searches through a string for the first character that matches any element of a specified string.

find_last_not_of

Searches through a string for the last character that is not any element of a specified string.

find_last_of

Searches through a string for the last character that is an element of a specified string.

rfind

Searches a string in a backward direction for the first occurrence of a substring that matches a specified sequence of characters.