gpt4 book ai didi

Delphi - 循环字符串

转载 作者:行者123 更新时间:2023-12-03 15:37:53 25 4
gpt4 key购买 nike

我试图找出字符串是否是“助记符类型”...我的助记符类型由从“a”到“z”和从“A”到“Z”的字母、从“0”到“9”的数字以及附加的“_”组成。我构建如下代码。如果给定的字符串与我的助记符模式匹配,则结果应为 True,否则为 False:

 TRes := True;
for I := 0 to (AString.Length - 1) do
begin
if not ((('0' <= AString[I]) and (AString[I] <= '9'))
or (('a' <= AString[I]) and (AString[I] <= 'z'))
or (('A' <= AString[I]) and (AString[I] <= 'Z'))
or (AString[I] = '_')) then
TRes := False;
end;

此代码的结果始终为 False。

最佳答案

我假设由于您标记了问题 XE5 并使用了从零开始的索引,因此您的字符串是从零开始的。但也许这个假设是错误的。

你的逻辑很好,虽然很难读。问题中的代码已经按照您的意图进行操作。至少 if 语句确实执行了您想要的测试。

让我们重写您的代码以使其更易于理解。我将以不同的方式放置它,并使用本地循环变量来表示每个字符:

for C in AString do
begin
if not (
(('0' <= C) and (C <= '9')) // C is in range 0..9
or (('a' <= C) and (C <= 'z')) // C is in range a..z
or (('A' <= C) and (C <= 'Z')) // C is in range A..Z
or (C = '_') // C is _
) then
TRes := False;
end;

当这样写时,我确信您会同意它执行您想要的测试。

为了使代码更容易理解,我会编写一个 IsValidIdentifierChar 函数:

function IsValidIdentifierChar(C: Char): Boolean;
begin
Result := ((C >= '0') and (C <= '9'))
or ((C >= 'A') and (C <= 'Z'))
or ((C >= 'a') and (C <= 'z'))
or (C = '_');
end;

正如@TLama所说,您可以使用CharInSet更简洁地编写IsValidIdentifierChar:

function IsValidIdentifierChar(C: Char): Boolean;
begin
Result := CharInSet(C, ['0'..'9', 'a'..'z', 'A'..'Z', '_']);
end;

然后您可以在此函数之上构建循环:

TRes := True;
for C in AString do
if not IsValidIdentifierChar(C) do
begin
TRes := False;
break;
end;

关于Delphi - 循环字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21852034/

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