Язык программирования C++. Вводный курс


Дополнительные операции со строками - часть 4


string sentence(

    "An ADT provides both interface and implementation." );

 

string::size_type position = sentence.find_1ast_of( 'A' );

string::size_type length = 3;

 

// заменяем ADT на Abstract Data Type

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

<


Начало  Назад  Вперед