允许的字符是A到Z,a到z,0到9.最少量的代码或单个函数最好,因为系统对响应输入的时间要求很高.
mgh*_*hie 10
如果我理解正确,你可以使用这样的函数:
function StripNonAlphaNumeric(const AValue: string): string;
var
SrcPtr, DestPtr: PChar;
begin
SrcPtr := PChar(AValue);
SetLength(Result, Length(AValue));
DestPtr := PChar(Result);
while SrcPtr <> #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;
Run Code Online (Sandbox Code Playgroud)
这将使用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 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;
Run Code Online (Sandbox Code Playgroud)
因此我通常不使用^.
顺便说一下,有没有人知道如何以突出显示正常工作的方式格式化?
小智 10
uses JclStrings;
S := StrKeepChars('mystring', ['A'..'Z', 'a'..'z', '0'..'9']);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7931 次 |
| 最近记录: |