Замена символов в строках
После того как найдена интересующая подстрока или символ они могут быть заменены с помощью следующих средств. Отдельные символы могут быть заменены, используя обращение по индексу, а подстроки могут быть изменены с помощью функции 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”