Вторая форма функции-члена erase() принимает в качестве параметров два итератора, ограничивающих удаляемую подстроку. Например, превратим
string name( "AnnaLiviaPlurabelle" );
в строку "Annabelle":
typedef string::size_type size_type;
size_type startPos = name.find( 'L' )
size_type endPos = name.find_1ast_of( 'b' );
name.erase( name.begin()+startPos,
name.begin()+endPos );
Символ, на который указывает второй итератор, не входит в удаляемую подстроку.
Для третьей формы параметром является только один итератор; эта форма удаляет все символы, начиная с указанной позиции до конца строки. Например:
name.erase( name. begin()+4 );
оставляет строку "Anna".
Функция-член insert() позволяет вставить в заданную позицию строки другую строку или символ. Общая форма выглядит так:
string_object.insert( position, new_string );
position обозначает позицию, перед которой производится вставка. new_string может быть объектом класса string, C-строкой или символом:
string string_object( "Missisippi" );
string::size_type pos = string_object.find( "isi" );
string_object.insert( pos+1, 's' );
Можно выделить для вставки подстроку из new_string:
string new_string ( "AnnaBelle Lee" );
string_object += ' '; // добавим пробел
// найдем начальную и конечную позицию в new_string
pos = new_string.find( 'B' );
string::size_type posEnd = new_string.find( ' ' );
string_object.insert(
string_object.size(), // позиция вставки
new_string, pos, // начало подстроки в new_string
posEnd // конец подстроки new_string
)
string_object получает значение "Mississippi Belle". Если мы хотим вставить все символы new_string, начиная с pos, последний параметр нужно опустить.
Пусть есть две строки:
string sl( "Mississippi" );
string s2( "Annabelle" );
Как получить третью строку со значением "Miss Anna"?
Можно использовать функции-члены assign() и append():