Конструкторы и присваивание строк

В классе string определено несколько конструкторов:

srting ( ); // создает пустой объект типа string

string (const *char); // создает объект типа “строка” на основе строки

// старого стиля

string (const *char, int n); // создает объект типа string и записывает туда

// n символов из строки, указанной

// первым параметром

string (string &); // конструктор копирования, создающий новый объект

// как копию объекта, переданного ему в качестве параметра

В классе string определены три операции присваивания:

string & operator = (const string & str);

string & operator = (const char * s);

string & operator = (char c);

Примеры

string s1;

string s2 (“Вася”);

string s3 (s2);

s1 = ‘x’;

s2 = s3;

Операции

Ниже приведены операции со строками.

Операция Действие
= Присваивание
+ Конкатенация
= = Равенство
! = Неравенство
< Меньше
< = Меньше или равно
> Больше
> = Больше или равно
[ ] Индексация
<< Вывод
>> Ввод
+ = Добавление

Для строк типа string не соблюдается соответствие между адресом первого элемента строки и именем, как это было в случае строк старого стиля, т.е. &s[0] не равно s.

Кроме операции индексации для доступа к элементу строки определена функция at:

string s(“Вася”);

cout << s.at (1); // будет выведен символ а

Функции

Присваивание и добавление частей строк

Для присваивания части одной строки другой служит функция assign:

assign (const string & str);

assign (const string & str, size_type pos, size_type n);

assign (const char * str, size_type n);

Первая функция присваивает строку str вызывающей строке (эквивалент операции присваивания):

string s1 (“Вася”), s2;

s2.assign (s1);

Вторая функция присваивает вызывающей строке часть строки str, начиная с позиции pos. Если pos больше длины строки, порождается исключение out_of_range. Вызывающей строке присваивается n символов либо, если pos больше длины строки str, – все символы до конца строки str.

Третья функция присваивает вызывающей строке n символов строки s старого типа.

Для добавления части одной строки к другой служит функция append:

append (const string & str);

append (const string & str, size_type pos, size_type n);

append (const char* s, size_type n);

Первая функция добавляет строку str к вызывающей строке (эквивалент операции +).

Вторая функция добавляет к взывающей строке часть строки str, начиная с позиции pos.

Третья функция добавляет к вызывающей строке n символов строки s старого типа.

Преобразование строк

Для вставки в одну строку части другой строки служит функция insert:

insert (size_type pos1, const string & str);

insert (size_type pos1, const string & str, size_type pos2, size_type n );

insert (size_type pos, const char* s, size_type n );

Первая функция вставляет строку str в вызывающую строку, начиная с позиции pos1 вызывающей строки (т.е. взывающая строка замещается строкой str, наичная с позиции pos1, а после str располагаются остальные символы вызывающей строки).

Вторая функция вставляет в вызывающую строку, начиная с позиции pos1, часть строки str длиной n символов, начиная с позиции pos2.

Третья функция вставляет в вызывающую строку n элементов строки старого типа, начиная с позиции pos вызывающей строки.

Для удаления части строки служит функция erase:

erase (size_type pos = 0, size_type n = pos);

Функция удаляет из вызывающей строки n элементов, начиная с позиции pos. Если pos не указана, элементы удаляются с начала строки.

Очистку всей строки можно выполнить с помощью функции clear:

void clear ( );

Для замены части строки служит функция replace:

replace (size_type pos1, size_type n1,const string & str);

replace (size_type pos1, size_type n1,const string & str, size_type pos2, size_type n2);

Здесь pos1 – позиция вызывающей строки, начиная с которой выполняется замена; n1 – количество удаляемых элементов, pos2 – позиция строки str, начиная с которой она вставляется в вызывающую строку; n2 – количество вставляемых элементов строки str.

Третья форма функции:

replace (size_type pos1, size_type n1,const char* s, size_type n2);

позволяет заменить n1 символов вызывающей строки на n2 символов строки старого типа s.

Для обмена содержимого двух строк служит функция swap:

swap (string & s);

Для выделения части строки служит функция substr:

substr (size_type pos = 0, size_type n = npos);

Эта функция возвращает подстроку вызывающей строки длиной n символов, начиная с позиции npos.

Для преобразования объектов типа string в строки старого стиля используется функция c_str:

const char* c_str ( ) const;

Функция возвращает константный указатель на оканчивающуюся нуль-символом строку.

Примеры

String s1 (“прекрасная королева”), s2 (“ле”), s3(“корова”);

cout << s3.insert (4, s2) << endl; // получится: королева

cout << s3.insert (7, “к”) << endl; // получится: королевка

s1.erase (0,3); // получится: s1=”красная королева”

cout << s1.erase (12, 2) << endl; // получится: красная корова

Поиск подстрок

Для поиска подстрок в классе string предусмотрено большое разнообразие функций. Рассмотрим некоторые их них:

size_type find (const string & str, size_type pos = 0) const;

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

size_type find (const char с, size_type pos = 0) const;

ищет самое левое вхождение символа c в вызывающую строку, начиная с позиции pos, и возвращает позицию в строке или число npos, если строка не найдена.

size_type rfind (const string & str, size_type pos = npos) const;

ищет самое правое вхождение строки str в вызывающую строку до позиции pos и возвращает позицию в строке или число npos, если строка не найдена.

size_type rfind (const char c, size_type pos = 0) const;

ищет самое правое вхождение символа c в вызывающую строку, до позиции pos и возвращает позицию в строке или число npos, если строка не найдена.

Примеры

int i, j;

string s1 (“лесная королева”), s2 (“ле”);

i = s1.find (s2);

j = s1.rfind (s2);

cout << “Первое вхождение S2 в S1 ” << i<< endl;

cout << “Последнее вхождение S2 в S1 “ << j<< endl;

На экране получится:

Первое вхождение S2 в S1 0

Последнее вхождение S2 в S1 11

Сравнение частей строк

Для сравнения частей строк используется функция compare (для сравнения сторк целиком применяются перегруженные операции отношения):

int compare (const string & str) const;

int compare (size_type pos1, size_type n1, const string & str) const;

int compare (size_type pos1, size_type n1, const string & str, size_type pos2, size_type n2) const;

Первая форма функции сравнивает две строки целиком и возвращает значение меньше нуля, если вызывающая строка “меньше” str, равное нулю, если строки одинаковы, и больше нуля, если вызывающая строка “больше”. Здесь “больше” или “меньше” означает сраинение букв по старшинству (порядку), т.е. “aa” и “aa” равны, “аб” и “ав” – вторая строка “больше” и т.п.

Вторая форма функции выполняет аналогичные действия, но сравнивает со строкой str n1 символов вызывающей строки, начиная с позиции pos1.

Третья форма функции сравнивает n1 символов вызывающей строки, начиная с позиции pos1, с подстрокой строки str длиной n2 символов, начиная с позиции pos2.

Наши рекомендации