Информатика: Методические указания к лабораторным работам № 1-5. Функции. Обработка символьных данных. Организация работы с файлами, страница 17

Это простейшие способы инициализации объектов string. Их разновидности обладают большей гибкостью и лучше поддаются контролю (пример 2).

Пример 2

string s1 ("Точность – вежливость королей.");

string s2 ("Хаос это порядок, который нам не понятен");

string s3("Идея выше факта.");

// Копирование 7 символов из середины источника

string s4(s2, 9, 7);

cout<<”s4: ” << s4 << endl;

// Комбинированное копирование

string s5 = " - " + s1.substr(11,10)+s1.substr(21,50);

cout<<”s5: ”<< s5 << endl;

// Функция substr() также может копировать отдельные символы

string s6 = s3+s1.substr(0, 1);

cout<<”s6: “<< s6 << endl;

Результат

s4: порядок

s5: – вежливость королей.

s6: Идея выше факта.Т

Анализ

В первом аргументе функции substr() передается начальная по-зиция, а во втором – длина подстроки в символах. У обоих аргументов имеются значения по умолчанию. Функция substr() с пустым списком аргументов возвращает копию всего объекта string: это удобный спо-соб копирования строк в  С++.

Присоединение, вставка и конкатенация (сцепление) строк

Функции append, insert, операторы: +, +=

Одно из самых ценных и удобных свойств строк С++ (как любого вектора) состоит в том, что они автоматически растут по мере надоб-ности, не требуя вмешательства со стороны программиста. Работа со строками не только становится более надежной, из нее почти пол-ностью устраняются "нетворческие" операции – отслеживание границ памяти, в которой хранятся данные строки.

Пример 3

 string str1("Hello, ");

 string str2("world!");

cout<<"Исходные строки:\n";

cout << "str1: " << str1 << endl;

 cout << "str2: " << str2 << endl ;

// Конкатенация(сцепление) двух string-объектов.

string str3;

 str3 = str1 + str2;

cout<<"str3: " << str3 << "\n\n";

// Демонстрация использования функции append() и оператора += .

string s("Служить ");

string s1("бы ");

string s2(" прислуживаться ");

s +=s1; // Присоединение строки "бы "

cout<<"s: "<<s<<endl;

s += "рад"; // Присоединение С-строки

cout<<"s: "<<s<<endl;

s += ','; // Присоединение отдельного символа

cout<<"s: "<<s<<endl;

s.append(s2); // Присоединение строки " прислуживаться "

(эквивалент +=)

cout<<"s: "<<s<<endl;

s.append("тошно"); // Присоединение С-строки (эквивалент +=)

cout<<"s: "<<s<<endl;

s.append(3,'.'); // Присоединение 3 символов:...

cout<<"s: "<<s<<endl;

// Демонстрация использования функции insert() для вставки строки.

string s4("Счастливые наблюдают");

cout <<"Исходная строка:\n";

cout << "s4: " << s4 << endl;

string s5("часов ");

s4.insert(11,s5); // Вставка строки "часов "

cout<<"s4: "<<s4<<endl;

s4.insert(17,"не"); //Вставка С-строки

cout<<"s4: "<<s4<<endl;

Результат

Исходные строки:

str1: Hello,

str2: world!

str3: Hello, world!

s: Служить бы

s: Служить бы рад

s: Служить бы рад,

s: Служить бы рад, прислуживаться

s: Служить бы рад, прислуживаться тошно

s: Служить бы рад, прислуживаться тошно …

Исходная строка:

s4: Счастливые наблюдают

s4: Счастливые часов наблюдают

s4: Счастливые часов не наблюдают

Анализ

Операторы + и += обеспечивают гибкие и удобные средства для объединения строковых данных. В правой части оператора может использоваться практически любой тип, интерпретируемый как один или несколько символов. Оператор + можно использовать для сцепления одного string-объекта с другим или string-объекта с C-строкой.