gpt4 book ai didi

delphi - 在 Delphi 7 中从字符串中去除非字母数字字符的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-03 15:02:58 24 4
gpt4 key购买 nike

允许的字符为 A 到 Z、a 到 z、0 到 9。由于系统对输入响应的时间要求严格,因此最好使用最少的代码或单个函数。

最佳答案

如果我理解正确,你可以使用这样的函数:

function StripNonAlphaNumeric(const AValue: string): string;
var
SrcPtr, DestPtr: PChar;
begin
SrcPtr := PChar(AValue);
SetLength(Result, Length(AValue));
DestPtr := PChar(Result);
while SrcPtr[0] <> #0 do begin
if SrcPtr[0] in ['a'..'z', 'A'..'Z', '0'..'9'] then begin
DestPtr[0] := SrcPtr[0];
Inc(DestPtr);
end;
Inc(SrcPtr);
end;
SetLength(Result, DestPtr - PChar(Result));
end;

这将使用 PChar 以获得最高速度(以可读性较低为代价)。

编辑:重新回复 gabr 关于使用 DestPtr[0] 而不是 DestPtr^ 的评论:无论如何,这应该编译为相同的字节,但是类似代码中有一些不错的应用程序,您需要向前看。假设您想替换换行符,那么您可以执行类似的操作

function ReplaceNewlines(const AValue: string): string;
var
SrcPtr, DestPtr: PChar;
begin
SrcPtr := PChar(AValue);
SetLength(Result, Length(AValue));
DestPtr := PChar(Result);
while SrcPtr[0] <> #0 do begin
if (SrcPtr[0] = #13) and (SrcPtr[1] = #10) then begin
DestPtr[0] := '\';
DestPtr[1] := 't';
Inc(SrcPtr);
Inc(DestPtr);
end else
DestPtr[0] := SrcPtr[0];
Inc(SrcPtr);
Inc(DestPtr);
end;
SetLength(Result, DestPtr - PChar(Result));
end;

因此我通常不使用 ^

关于delphi - 在 Delphi 7 中从字符串中去除非字母数字字符的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/574603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com