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

Поиск подстроки в строке с заданной позиции (стандартный вариант)

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



Автор: Romkin
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Вроде работает
Substr - подстрока, S - строка, fromPos - с какой позиции искать
Если вхождение не найдено, возвращает 0
Ограничения - как для ansiStrPos

Зависимости: SysUtils
Автор:       Romkin, romkin@pochtamt.ru, Москва
Copyright:   Romkin
Дата:        18 июля 2002 г.
***************************************************** }

function fAnsiPos(const Substr, S: string; FromPos: integer): Integer;
var
  P: PChar;
begin
  Result := 0;
  P := AnsiStrPos(PChar(S) + fromPos - 1, PChar(SubStr));
  if P <> nil then
    Result := Integer(P) - Integer(PChar(S)) + 1;
end;

Перевод контента на русский язык:

Функция fAnsiPos предназначена для поиска подстроки (Substr) в основной строке (S) начиная с указанной позиции (FromPos). Функция возвращает позицию первого вхождения подстроки, если она найдена, или 0, если не найдена.

Распределение кода:

  1. Result := 0;: Инициализирует переменную результата в 0, которая будет использоваться для хранения позиции подстроки.
  2. P := AnsiStrPos(PChar(S) + fromPos - 1, PChar(SubStr));: Эта строка вызывает встроенную функцию AnsiStrPos, которая ищет первое вхождение SubStr в S, начиная с позиции, указанной в FromPos. Результат хранится в переменной P.
  3. if P <> nil then Result := Integer(P) - Integer(PChar(S)) + 1;: Если P не равно nil (т.е., подстрока была найдена), функция рассчитывает позицию подстроки и хранит ее в Result. Рассчет включает вычитание адреса начала основной строки (PChar(S)) из P и добавление 1, потому что AnsiStrPos возвращает указатель на первый символ подстроки.

Указанные ограничения в коде состоят в том, что эта функция имеет те же ограничения, что и AnsiStrPos, то есть она работает только с ANSI-строками (т.е., строками, закодированными в один байт) и может не работать правильно с Unicode-строками.

В целом, код ясен и структурирован. Однако, есть минорное ограничение: переменная Result должна быть инициализирована более конкретным значением, чем просто 0, потому что это может привести к неожиданному поведению, если функция возвращает 0 (что она сделает, если подстрока не найдена). Вместо этого можно инициализировать Result в -1, что будет указывать на то, что подстрока не была найдена.

Вот обновленная версия кода с этими предложениями:

function fAnsiPos(const Substr, S: string; FromPos: integer): Integer;
var
  P: PChar;
begin
  Result := -1; // Инициализирует результат в -1, если не найдено
  P := AnsiStrPos(PChar(S) + fromPos - 1, PChar(SubStr));
  if P <> nil then
    Result := Integer(P) - Integer(PChar(S)) + 1;
end;

В статье описан функционал поиска подстроки в строке с заданной позиции, реализованный в виде процедуры fAnsiPos, которая возвращает индекс начала обнаруженной подстроки или 0, если она не найдена.


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

Получайте свежие новости и обновления по 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:43:52/0.0056960582733154/0