Delphi 6: Как быстро найти подстроку в динамическом массиве? - PullRequest
0 голосов
/ 30 мая 2010

Как я могу найти в подстроке динамический массив char в Delphi 6 и получить индекс соответствия, а не указатель? Я видел функции в Delphi 6, которые делают это для строк, но не для динамических массивов символов. Существует функция с именем SearchBuf, но эта функция возвращает указатель PChar на местоположение совпадения, когда мне нужен индекс массива совпадения.

Спасибо.

1 Ответ

1 голос
/ 30 мая 2010

Если у вас есть указатель на совпадение, просто вычтите указатель на первый символ, и вы получите свой индекс.

var
  Buf, Result: PChar;
  Index: Integer;

Result := SearchBuf(Buf, ...);
if Assigned(Result) then
  Index := Result - Buf
else
  Index := -1; // not found

Я почти уверен, что арифметика указателей разрешена в Delphi 6. Если нет, то сначала приведите указатели к целочисленным типам:

Index := Cardinal(Result) - Cardinal(Buf);
...