position представляет собой начальную позицию,
sentence.repiace( position, length, "Abstract Data Type" );
position представляет собой начальную позицию, а length – длину заменяемой подстроки. Третий аргумент является подставляемой строкой. Его можно задать несколькими способами. Допустим, как объект string:
string new_str( "Abstract Data Type" );
sentence.replace( position, length, new_str );
Следующий пример иллюстрирует выделение подстроки в new_str:
#include <string>
typedef string::size_type size_type;
// найдем позицию трех букв
size_type posA = new_str.find( 'A' );
size_type posD = new_str.find( 'D' );
size_type posT = new_str.find( 'T' );
// нашли: заменим T на "Type"
sentence.replace( position+2, 1, new_str, posT, 4 );
// нашли: заменим D на "Data "
sentence.replace( position+1, 1, new_str, posD, 5 );
// нашли: заменим A на "Abstract "
sentence.replace( position, 1, new_str, posA, 9 );
Еще один вариант позволяет заменить подстроку на один символ, повторенный заданное количество раз:
string hmm( "Some celebrate Java as the successor to C++." );
string:: size_type position = hmm.find( 'J' );
// заменим Java на xxxx
hmm.repiace( position, 4, 'x', 4 );
В данном примере используется указатель на символьный массив и длина вставляемой подстроки:
const char *lang = "EiffelAda95JavaModula3";
int index[] = { 0, 6, 11, 15, 22 };
string ahhem(
"C++ is the language for today's power programmers." );
ahhem.replace(0, 3, lang+index[1], index[2]-index[1]);
А здесь мы используем пару итераторов:
string sentence(
"An ADT provides both interface and implementation." );
// указывает на 'A' в ADT
string: iterator start = sentence. begin()+3;
// заменяем ADT на Abstract Data Type
sentence.repiace( start, start+3, "Abstract Data Type" );
Оставшиеся четыре варианта допускают задание заменяющей строки как объекта типа string, символа, повторяющегося N раз, пары итераторов и C-строки.
Содержание Назад Вперед