ПРИСВАИВАНИЕ, ДОБАВЛЕНИЕ И ОБМЕН СТРОК

КОПИРОВАНИЕ СТРОК И ПОДСТРОКИ

 

Скопировать одну строку в другую можно с помощью

· обычной операции присваивания:

string st2 = st3; // копируем st3 в st2

 

· функции-члена copy()

s.copy(st2, n, pos) - копирует из строки s в символьный массив st2n символов, начиная с pos. В символьный массив st2 завершающий символ нуль не дописывается. Можно использовать функцию без параметраpos (копируются первые n символов строки s).

 

string s("МАМА МЫЛА "); char st2[100];

s.copy(st2, 4, 5); // копируем в st2 четыре символа строки s, начиная с 6.

st2[4]='\0';

cout << st2<< " \n";

 

· функции-членsubstr();

str.substr(pos, n)возвращает строку, являющуюся подстрокой исходной строки, начиная с позиции pos и включая n символов, или до конца строки (если nне указано).

string s("МАМА МЫЛА "),st2;

st2=s.substr(2, 5); // копируем в st2 пять символов строки s, начиная с 3

cout << st2<< " \n";

 

 

Если функция вызывается без параметров st2=s.substr(), то в st2 скопируется вся строка s.

 

1. Для конкатенации строк используется операция сложения (+) или операция сложения с присваиванием (+=). Этот оператор создает копию левого операнда, а затем добавляет к ней содержимого правого операнда.

Пусть даны две строки:

string s1( "hello, " );

string s2( "world\n" );

Можем получить третью строку, состоящую из конкатенации первых двух, таким образом:

string s3 = s1 + s2;

cout << s3;

 

 

Если необходимо добавить s2 в конец s1, должны написать:

s1 += s2;

 

Операция сложения может конкатенировать объекты класса string не только между собой, но и со строками встроенного типа. Можно переписать пример, приведенный выше, так, чтобы специальные символы и знаки препинания представлялись встроенным типом, а значимые слова – объектами класса string:

const char *pc = ", ";

const char *pc1 = "!";

string s1( "hello" );

string s2( "world" );

string s3 = s1 + pc + s2 + pc1 + "\n";

cout << s3;

 

Подобные выражения работают потому, что компилятор знает, как автоматически преобразовывать объекты встроенного типа в объекты класса string. Возможно и простое присваивание встроенной строки объекту string:

string s1;

const char *pc = "a character array\n";

s1 = pc; // правильно

cout << s1;

 

 

Обратное преобразование не работает. Попытка выполнить следующую инициализацию строки встроенного типа вызовет ошибку компиляции:

char *str = s1; // ошибка компиляции

Чтобы осуществить такое преобразование, необходимо явно вызвать функцию-член c_str():

const char *str = s1.c_str(); // правильно

 

Функция c_str() возвращает указатель на символьный массив, содержащий строку объекта string в том виде, в каком она находилась бы во встроенном строковом типе.
Т.о., чтобы занести информацию из объектаstring во встроенную строку(массив) необходимо явно вызвать функцию-член c_str():

char d[256];

strcpy(d, s1.c_str())

 

2. Функции-члены более общего назначения assign() и append()

s.append(str, pos,n) - добавляет к строке sn-символов строки str, начиная с позиции pos.

s.assign (str, pos,n) - присваивает строке s n-символов строки str, начиная с позиции pos.