Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Функция замены в строке всех вхождений одной подстроки на другую

Delphi , Синтаксис , Текст и Строки



Автор: Матюшкин Сергей
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
В отличие от других подобных функций, эта - не зависнет, если в строке нужно 
заменить не только одно слово совершенно другим,
но и допустим, слово "Штаны" на "-Штаны-"
(Т.е. начальное слово после замены остается, но к нему добавляется какой нибудь 
символ справа, или слева. В данном случае по краям слова добавлен знак минуса).

Я пересмотрел много примеров, и ни один из них не справился с этой задачей.
(Может я плохо искал?).

Зависимости: Windows, SysUtils
Автор:       Матюшкин Сергей, seregam@ua.fm, ICQ:162733776, Днепропетровск
Copyright:   Sergey_M
Дата:        26 мая 2003 г.
***************************************************** }

function Replace(Str, X, Y: string): string;
{Str - строка, в которой будет производиться замена.
 X - подстрока, которая должна быть заменена.
 Y - подстрока, на которую будет произведена заменена}

var
  buf1, buf2, buffer: string;
  i: Integer;

begin
  buf1 := '';
  buf2 := Str;
  Buffer := Str;

  while Pos(X, buf2) > 0 do
  begin
    buf2 := Copy(buf2, Pos(X, buf2), (Length(buf2) - Pos(X, buf2)) + 1);
    buf1 := Copy(Buffer, 1, Length(Buffer) - Length(buf2)) + Y;
    Delete(buf2, Pos(X, buf2), Length(X));
    Buffer := buf1 + buf2;
  end;

  Replace := Buffer;
end;

Пример использования:

procedure TForm1.Button1Click(Sender: TObject);
var
  a: Integer;
begin
  for a := 0 to Memo1.Lines.Count do
    Memo1.Lines[a] := Replace(Memo1.Lines[a], 'Штаны', '-Штаны-');
end;

Это реализация функции Replace в Delphi, которая заменяет все вхождения указанного подстроки (X) на другую подстроку (Y) в заданной входной строке (Str). Функция возвращает модифицированную строку.

Основное преимущество этой реализации заключается в ее способности обрабатывать сложные заменения, когда оригинальное слово может оставаться целым, но иметь добавленные символы. Например, замена "Штаны" на "-Штаны-" как показано в комментариях.

Далее приведен разбор работы функции:

  1. Функция принимает три параметра: Str (входная строка), X (подстрока для замены) и Y (замена подстроки).
  2. Два временных буфера, buf1 и buf2, инициализируются пустыми строками.
  3. Основной цикл функции использует цикл while, который продолжается до тех пор, пока все вхождения X не будут заменены в входной строке.
  4. Внутри цикла:
    • buf2 устанавливается в текущее значение Str.
    • buf1 устанавливается в префикс оригинального буфера (Buffer) до и включая последнее вхождение X, за которым следует подстрока замены Y.
    • Последнее вхождение X в buf2 удаляется, эффективно перемещая остаток строки вперед.
    • Модифицированный buf1 конкатенируется с обновленным buf2, чтобы образовать новый буфер (Buffer).
  5. Когда все вхождения X будут заменены, финальное значение Buffer присваивается переменной Replace.

Пример использования функции в процедуре Button1Click демонстрирует, как использовать эту функцию для замены вхождений "Штаны" на "-Штаны-" в строки memo-контроля.

Некоторые потенциальные улучшения для рассмотрения:

  • Обработка ошибок: Функция не проверяет, являются ли X или Y пустыми строками, что может привести к неожиданному поведению. Вам может потребоваться добавить проверки на это.
  • Оптимизация производительности: Функция использует временный буфер (Buffer) и повторно конкатенирует строки, что может быть неэффективным для больших входных строк. Вам может потребоваться использовать более эффективный алгоритм или структуру данных.

В целом реализация функции является ясной и компактной, что делает ее легко понимаемой и поддерживаемой.

Функция замены в строке всех вхождений одной подстроки на другую, способная заменить не только одно слово, но и слова с добавлением символов справа или слева.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-04-04 05:51:08/0.0057899951934814/0