我需要验证字符串中的某个位置是否是给定的有效字符集的一部分。我的代码无法编译,如何迭代字符集?
function Valid_Char_at_Index(const CheckStr: string; CheckPos : Integer ; ValidNextChars: TSysCharSet)
: boolean;
var
mychar : Char;
begin
Result := false;
for each mychar in ValidNextChars do
if (CheckStr(Length(CheckStr)) =mychar ) then
Result:= True;
end;
2条答案
按热度按时间4si2a6ki1#
首先,我们不清楚为什么你会期望
for each
工作,因为 Delphi 没有for each
循环,如文档中所述。文档或简单的WWW搜索显示,相应的Delphi概念是for in
循环。第二,我完全不明白你所说的
CheckStr(Length(CheckStr)) = mychar
是什么意思。 predicate 肯定需要包含字符索引吗?这是一个语法错误,因为CheckStr
不是一个函数或类型。实际上,你只是想检查CheckStr
的第CheckPos
个字符是否是mychar
。把所有这些加在一起,我们就得到了
但请注意,这只适用于ASCII(和8位字符集),因此基本上只适用于非排版英语,因为
TSysCharSet
是set of AnsiChar
--而set of WideChar
是一种不可能的类型(从SizeOf(WideChar) = 2 > 1
开始)。解决此问题的一个简单方法是使用字符的 array:
但是在现代的 Delphi 版本中,您根本不需要编写自己的函数,因为您可以简单地使用
TCharHelper.IsInArray
方法:附加信息:如果您只使用
AnsiString
(或只使用ASCII的string
),当然应该使用in
集合运算符:但是,正如我上面所说的,一组
WideChar
是不可能的,所以如果需要8位以上的字符,就必须放弃整个set
的概念。vxqlmq5t2#
你不需要迭代,使用
CharInSet()
。