Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
STL5 / lab2-string / lab2-string.doc
Скачиваний:
9
Добавлен:
10.04.2015
Размер:
177.66 Кб
Скачать

Замена символов в строках

После того как найдена интересующая подстрока или символ они могут быть заменены с помощью следующих средств. Отдельные символы могут быть заменены, используя обращение по индексу, а подстроки могут быть изменены с помощью функции replace. Функцияreplaceимеет большое количество перегруженных вариантов. Ниже приведены некоторые из ее перегруженных версия (более детальную информацию можно найти в литературе по С++):

template <class Ch, class Tr = char_traits<Ch>, class A = allocator<Ch> >

class std::basic_string

{

public:

// Замена n символов, начиная с pos1, содержимым строки str

basic_string& replace(size_type pos1, size_type n,

const basic_string& str);

// Замена n символов, начиная с pos1, содержимым строки C-строк p

basic_string& replace(size_type pos1, size_type n,

const Ch* p);

// Замена символов определяемых парой итераторов iter 1

// (итератор, указывающий на первый заменяемый символ) и

// iter2 (итератор, указывающий на символ следующий за

// последним заменяемым) содержимым строки str

basic_string& replace(iterator iter1, iterator iter2,

const basic_string& str);

// Замена символов определяемых парой итераторов iter 1

// (итератор, указывающий на первый заменяемый символ) и

// iter2 (итератор, указывающий на символ следующий за

// последним заменяемым) содержимым строки str

template<class In>

basic_string& replace(iterator iter1, iterator iter2,

In in1, In in2);

};

Примеры использования функции replace

#include<string>

#include<iostream>

using namespace std;

int main(int argc, char** argv)

{

int i;

string MyString("Some useless information ");

string StringToReplace("less ");

cout << MyString << endl;

MyString.replace(MyString.find(StringToReplace),

StringToReplace.length(),

“ful”);

cout << MyString << endl;

}

Результат работы программы:

Some useless information

Some useful information

#include<string>

#include<iostream>

using namespace std;

int main(int argc, char** argv)

{

int i;

string MyString("Long-long-long-long-long-long string");

char str[] = {‘S’,‘h’,’o’,’r’,’t’};

cout << MyString << endl;

// Заменить символы начиная MyString.begin() до MyString.end()-7 не

// включительно, символами из последовательности определяемой

// парой итераторов. В качестве итераторов используются указатели на

// элементы массива символов

MyString.replace(MyString.begin(),

MyString.end()-7,

str,str+5);

cout << MyString << endl;

return 0;

}

Результат работы программы:

Long-long-long-long-long-long string

Short string

Особенность работы функций replaceявляется то, что если вставляемые символы не помещаются в старой строке, ее размер автоматически увеличивается

string str(“Str”);

str.replace(0,3,”String”); // размер строки автоматически увеличился

Удаление символов из строки возможно с помощью следующих функций.

template <class Ch, class Tr = char_traits<Ch>, class A = allocator<Ch> >

class std::basic_string

{

public:

// Удаление n символов, начиная с i

basic_string& erase(size_type i = 0, size_type n = npos);

// Удаление символа, на который указывает итератор,

// возвращается итератор, указывающий на символ следующий на удаляемым

iterator erase(iterator i);

// Удаление символов, начиная с указываемого итератором first

// до указываемого итератором last не включительно

// возвращается итератор, указывающий на символ следующий на удаляемым

iterator erase(iterator first, iterator last);

};

Пример удаление первой половины строки

string str(“Some string”)

str.erase(str.begin(),str.begin()+str.length);

// str содержит “string”

Соседние файлы в папке lab2-string