Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
77
Добавлен:
07.03.2016
Размер:
1.78 Mб
Скачать

7.2. Функції класу string

Функції класу string для зручності розгляду можна розбити на декілька категорій: привласнення і додавання частин рядків, перетворення рядків, пошук підрядків, порівняння і отримання характеристик рядків.

7.2.1 Привласнення і додавання частин рядків

Для привласнення частині одного рядка іншого слугує функція assign:

assign(const string& str);

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

assign(const char* s, size_type n);

Тут size_type – беззнаковий цілий тип.

Перша форма функції привласнює рядок str рядку, який викликає функцію, при цьому дія функції еквівалентна операції присвоювання:

string s1(Вася"), s2;

s2.assign(s1); // Рівносильно s2 = s1;

Друга форма привласнює рядку, який викликає функцію, частину рядка str, починаючи з позиції pos. Якщо pos більше довжини рядка, породжується виключення out_of_range. Рядку, який викликає функцію, привласнюється n символів, або, якщо pos + n більше, ніж довжина рядка 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. Якщо pos більше довжини рядка, породжується виключення out_of_range. До рядка, який викликає функцію, додається n символів, або, якщо pos + n більше, ніж довжина рядка str, всі символи до кінця рядка str. Якщо довжина результату більше максимально допустимої довжини рядка, породжується виключення length_error.

Третя форма додає до рядка, який викликає функцію, n символів рядка s старого типу.

7.2.2 Перетворення рядків

Для вставки в один рядок частини іншого рядка слугує функція 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. Іншими словами, рядок, який викликає функцію, заміщається рядком, який складається з перших pos1 символів, за якими слідує рядок str цілком, а після нього розташовується решта символів рядка, який викликає функцію. Якщо pos1 більше довжини рядка, породжується виключення out_of_range. Якщо довжина результату більше максимально допустимої довжини рядка, породжується виключення length_error.

Друга форма функції вставляє в рядок, який викликає функцію, частину рядка str, починаючи з позиції pos1. Рядок, який викликає функцію, заміщається рядком, який складається з перших pos1 символів, за якими слідують n елементів рядка str, починаючи з позиції pos2, а після них розташовується решта символів рядка, який викликає функцію. Якщо n більше довжини рядка str, копіюється весь залишок рядка str. Якщо pos1 або pos2 більше довжини відповідного рядка, породжується виключення out_of_range. Якщо довжина результату більше максимально допустимої довжини рядка, породжується виключення length_error.

Третя форма функції вставляє в рядок, який викликає функцію, n елементів рядка s старого типу, починаючи з позиції pos.

Для видалення частини рядка слугує функція erase:

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

Вона видаляє із рядка n елементів, починаючи з позиції pos. Якщо pos не вказане, елементи видаляються з початку рядка. Якщо не вказане n, видаляється весь залишок рядка.

Очищення всього рядка можна виконати за допомогою функції 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. Якщо pos1 або pos2 більше довжини відповідного рядка, породжується виключення out_of_range. Якщо довжина результату більше максимально допустимої довжини рядка, породжується виключення length_error.

Третя форма функції заміни дозволяє замінити n1 символів рядка на n2 символів рядка старого стилю s:

replace(size_type pos1, size_type n1,

const char* s, size_type n2);

Для обміну вмісту двох рядків слугує функція swap:

swap(strings s);

Для виділення частини рядка слугує функція substr:

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

Ця функція повертає рядок довжиною n, починаючи з позиції pos. Якщо pos більше довжини рядка, породжується виключення out_of_range. Якщо n більше довжини рядка, повертається весь залишок рядка.

Іноді потрібно перетворювати об'єкти типу string в рядки старого стилю. Для цього призначена функція c_str:

const char* c_str() const;

Вона повертає константну вказівку на рядок, що закінчується нуль-символом. Цей рядок не можна намагатися змінити. Вказівка, яка на неї посилається, може стати некоректною після будь-якої операції над рядком-джерелом. Аналогічно працює функція data, за тим виключенням, що не додає в кінець рядка нуль-символ:

const char* data ( ) const;

Функція copy копіює в масив s n елементів рядка, починаючи з позиції pos. Нуль-символ в результуючий масив не заноситься. Функція повергає кількість скопійованих елементів:

size_type сору(char*s,size_type n,size_type pos=0) const;

Приклад використання функцій зміни вмісту рядків:

#include <string>

#include <iostream>

using namespace std;