【问题标题】:Delphi 6: How to search a dynamic array for sub-string quickly?Delphi 6:如何快速搜索动态数组的子字符串?
【发布时间】:2010-05-30 03:36:50
【问题描述】:

如何在 Delphi 6 中搜索 char 的动态数组以查找子字符串并取回匹配项的索引,而不是指针?我在 Delphi 6 中看到过对字符串执行此操作但对动态 char 数组不执行此操作的函数。有一个名为 SearchBuf 的函数,但是当我需要匹配的数组索引时,该函数返回一个指向匹配位置的 PChar 指针。

谢谢。

【问题讨论】:

  • 您使用动态字符数组有什么特别的原因吗?我想不出它们比字符串有什么优势。
  • 我正在将数据移入以 char 数组格式管理音频数据的函数之间。这是遗留代码的事情。
  • 如果您将字符串变量的长度设置为动态数组的大小,那么您可以将该字符串类型转换为 PChar 并且您将拥有一个同样好的字符数组供函数读取或填充。

标签: delphi search arrays char


【解决方案1】:

如果你有一个指向匹配的指针,只需减去指向第一个字符的指针,你就会得到你的索引。

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);

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2013-01-06
    • 2014-11-24
    • 1970-01-01
    • 2016-09-18
    • 2022-01-08
    • 2020-04-09
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多