§ 9. Строковые величины
9.4. Копирование, вставка, замена и удаление символов
При работе с текстом часто приходится выделять и преобразовывать части строк. Часть текста (подстроку) можно скопировать или вырезать, а затем вставить в другое место в тексте. Строка или ее часть может быть заменена на другую строку. Команды для выполнения операций по работе с фрагментом текста представлены в таблице. Во всех командах переменная n обозначает позицию (номер) символа, начиная с которого выполняют операцию, а переменная k — количество символов. Разберем команды подробнее (пример 9.9). В результате выполнения команды substr строка s не изменяется. Результат работы функции присваивается другой строке. Команды erase, insert и replace изменяют исходную строку s. В примере 9.10 показано, как применяются указанные команды. Функции insert и replace имеют еще один вариант реализации. Этот вариант позволяет использовать при вставке не всю строку s1, а только ее часть. В этом случае задаются два дополнительных параметра: позиция n1 и количество символов k1, относящихся к строке s1. Параметры позволяют выделить подстроку в строке s1, которая и вставляется в исходную строку: insert(n, s1, n1, k1), replace(n, k, s1, n1, k1). Пример 9.11. Написать программу, которая определит, сколько раз встречается заданная подстрока в строке. Этапы выполнения задания I. Исходные данные: переменная s — исходная строка, p — исходная подстрока. II. Результат: k — искомое количество. III. Алгоритм решения задачи. 1. Вводим исходные данные. 4.1. Выделим из строки s подстроку t такой же длины, что и длина p, начиная с текущего символа. 5. Вывод результата. IV. Описание переменных: s, p, t — string, n1, n2, k — int. |
Пример 9.9. Команды для преобразования строк. 1. Запись s1 = s.substr(n, k); означает, что в строке s выделяют k символов, начиная с символа, индекс которого записан в переменной n. Символы копируются в переменную s1 (действие команды сравнимо с копированием фрагмента текста в буфер обмена). 2. Запись s.erase(n, k); означает, что в строке s выделяют k символов, начиная с символа, индекс которого записан в переменной n. Выделенные символы удаляются из строки s. Остальные символы строки сдвигаются влево (действие команды сравнимо с удалением фрагмента текста). 3. Запись s.insert(n, s1); означает, что в строку s вставляют символы строки s1, вставка происходит в позиции n. Остальные символы строки сдвигаются вправо (действие команды сравнимо со вставкой фрагмента текста из буфера обмена в позицию курсора). 4. Запись s.replace(n, k, s1); означает, что символы строки s заменяют на символы строки s1. Заменяются k символов, начиная с символа, стоящего в позиции n. Остальные символы строки сдвигаются (действие команды сравнимо со вставкой фрагмента текста из буфера обмена на место выделенного фрагмента). Пример 9.10. Примеры использования команд (команды применяются последовательно).
Пример 9.11. V. Программа:
VI. Тестирование. Эффективное решение данной задачи можно получить с помощью алгоритма Кнута—Мориса—Пратта (КНП-алгоритм)[1]. [1] Котов В. М., Лапо А. И., Быкадоров Ю. А., Войтехович Е. Н. Информатика, 9 класс. Минск: Народная асвета, 2019. С. 44. |