Удалить из строки первое и последнее вхождение заданной подстроки. - 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;

Объяснение кода листинга программы

  1. Задана функция del, которая принимает на вход две строки s и ps и возвращает строку.
  2. Внутри функции объявлены следующие переменные:
    • first - позиция первого вхождения подстроки ps в строке s.
    • last - позиция последнего вхождения подстроки ps в строке s.
    • len - длина подстроки ps.
  3. Переменная len инициализируется значением длины подстроки ps.
  4. Переменные first и last инициализируются результатами функций pos и rpos, которые возвращают позиции первого и последнего вхождения подстроки ps в строке s.
  5. Далее следует условие, которое проверяет, что:
    • first и last не равны нулю (то есть, подстрока встречается в строке хотя бы дважды).
    • first меньше last (то есть, второе вхождение подстроки начинается раньше, чем заканчивается первое).
  6. Если условие выполняется, то это означает, что подстрока встречается в строке дважды и эти вхождения пересекаются. В этом случае, функция возвращает пустую строку.
  7. В противном случае, выполняется следующее условие:
    • Если last больше 0, то удаляется последний фрагмент строки s с конца до last включительно.
    • Если first больше 0 и first не равно last (то есть, подстрок встречается в строке хотя бы дважды, но эти вхождения не пересекаются), то удаляется первый фрагмент строки s с начала до first включительно.
  8. В конце функции, возвращаемое значение функции присваивается переменной del.
  9. Функция заканчивается и возвращает результат.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.5 из 5
Похожие ответы