ПРИСВАИВАНИЕ, ДОБАВЛЕНИЕ И ОБМЕН СТРОК
КОПИРОВАНИЕ СТРОК И ПОДСТРОКИ
Скопировать одну строку в другую можно с помощью
· обычной операции присваивания:
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.