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

Оператор +=, как и функция append, может присоединять к исходной строке как С-строки, так и string-объекты. Но оператор += присоединет строковые значения, определяемые одним аргументом, функция же appendможет иметь несколько аргументов (см. табл. 1). Первый аргумент функции insert это индекс, c которого вставляется новая С-строка или строка string. Функция insert широко используется для вставки символов (см. следующий раздел), в этом случае она имеет более двух аргуметов.

Вставка, замена и удаление символов в строках

Функцииinsert, replace, erase.

Функция вставки символов insert очень удобна: вам не придется беспокоиться, чтобы вставляемые символы не вышли за пределы текущего блока памяти. Строка расширяется, и существующие симво-лы вежливо подвигаются, уступая место новым.

Если вы хотите, чтобы существующие символы были заменены новыми, воспользуйтесь функцией перезаписи replace. Существует несколько перегруженных версий replace, но простейшая форма получает три аргумента:

·  начальную позицию в строке;

·  количество символов, заменяемых в исходной строке;

·  строку замены (длина которой может не совпадать со вторым аргументом).

Строка замены может быть как типа char*, так и типа string.

Функция erase легко и эффективно удаляет символы из строк. Функция получает два аргумента: начальную позицию удаления (по умолчанию 0) и количество удаляемых символов (по умолчанию все). Если заданное количество символов больше количества оставшихся символов в строке, стираются все символы до конца (таким образом, вызов erase без аргументов удаляет из строки все символы).

Пример 4

 string s1("Это простой тест.");

string s2("ABCDEFG");

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

cout << "s1: " << s1 << endl;

 cout << "s2: " << s2 << "\n\n";

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

cout << "Вставляем в строку s1 с 5 позиции 4 символа строки s2, начиная с 0 позиции:\n";

s1.insert(5, s2,0,4);

 cout <<s1 << "\n\n";

// Демонстрацияиспользования функции erase

cout << "Удаляем 4 символов из строки s1, начиная с 5 позиции:\n";

s1.erase(5,4);

 cout << s1<< "\n\n";

// Демонстрация использования функции replace

cout <<"Заменяем 2 символа в s1, начиная с 6 позиции, 3 символами строки s2 с 1 позиции:\n";

s1.replace(6, 2, s2,1,3);

 cout << s1 << endl;

Результат

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

s1: Это простой тест.

s2: ABCDEFG.

Вставляем в строку s1 c 5 позиции 4 символа строки s2, начиная с 0 позиции:

Это пABCDростой тест.

Удаляем 4 символа из строки s1, начиная с 5 позиции:

Это простой тест.

Заменяем 2 символа в s1, начиная с 6 позиции, 3 сиволами строки s2 с 1 позиции:

Это прBCDтой тест.

Анализ

В данной программе в четвертый аргумент функции replace пе-редается 3 символа строки s2, которые заменяют 2 символа строки s1, т. е. 2 символа заменили на 3 символа, а часть строки, оставшаяся после вставки, просто подвинулась!

Поиск в строках

Функции группы find класса string предназначены для поиска символа или группы символов в заданной строке. Приведем две наибо-лее применяемые функции этой группы.

find

Ищет в строке символ или группу символов. Возвращает начальную позицию первого найденного экземпляра или npos при отсутствии совпадений.

find_first_of

Ищет в строке и возвращает позицию первого символа, совпадающего с любым символом из заданной группы. При отсутствии совпадений возвращает npos.

Если передать в качестве параметра  find_first_of  один символ, вызов  find_first_of  будет полностью аналогичен вызову  find.  Однако если передать в качестве параметра  find_first_of  строку, метод вернет индекс первого вхождения любого символа из данной строки:

string s = "Hello, World!";

int index = s.find_first_of(’ ’); // поиск первого пробела