Удалить из строки первое и последнее вхождение заданной подстроки. - Free Pascal
Формулировка задачи:
1.Написать программу, удаляющую из строки первое и последнее вхождение заданной подстроки.
2.Считывание строк должно осуществляться с экрана и быть реализовано в виде отдельной подпрограммы с передачей параметра-строки по адресу.
3.Поиск и удаление вхождений подстроки должны выполняться в отдельной функции.
4.Вывод результата необходимо выполнять с помощью отдельной подпрограммы.
Решение задачи: «Удалить из строки первое и последнее вхождение заданной подстроки.»
textual
Листинг программы
function del(s, ps : string) : string; var first, last, len : integer; begin len := length(ps); first := pos(ps, s); last := rpos(ps, s); // (существуют как минимум 2 разных вхождения подстрок) И // (они пересекаются, т.е., второе начинается раньше, чем заканчивается первое)? if (first * last * (first - last) <> 0) and (first + len > last) then s := '' else begin // пересечения нет, или вхождении подстрок меньше 2-х if last > 0 then delete(s, last, len); // удаляем сначала последнее if (first > 0) and (first <> last) then delete(s, first, len); // а потом, если их было 2 разных - то и первое end; del := s; // всё, уходим end;
Объяснение кода листинга программы
- Задана функция
del
, которая принимает на вход две строкиs
иps
и возвращает строку. - Внутри функции объявлены следующие переменные:
first
- позиция первого вхождения подстрокиps
в строкеs
.last
- позиция последнего вхождения подстрокиps
в строкеs
.len
- длина подстрокиps
.
- Переменная
len
инициализируется значением длины подстрокиps
. - Переменные
first
иlast
инициализируются результатами функцийpos
иrpos
, которые возвращают позиции первого и последнего вхождения подстрокиps
в строкеs
. - Далее следует условие, которое проверяет, что:
first
иlast
не равны нулю (то есть, подстрока встречается в строке хотя бы дважды).first
меньшеlast
(то есть, второе вхождение подстроки начинается раньше, чем заканчивается первое).
- Если условие выполняется, то это означает, что подстрока встречается в строке дважды и эти вхождения пересекаются. В этом случае, функция возвращает пустую строку.
- В противном случае, выполняется следующее условие:
- Если
last
больше 0, то удаляется последний фрагмент строкиs
с конца доlast
включительно. - Если
first
больше 0 иfirst
не равноlast
(то есть, подстрок встречается в строке хотя бы дважды, но эти вхождения не пересекаются), то удаляется первый фрагмент строкиs
с начала доfirst
включительно.
- Если
- В конце функции, возвращаемое значение функции присваивается переменной
del
. - Функция заканчивается и возвращает результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д