有朋友写过这样的检查字符串格式的函数吗? ( 积分: 20 )

  • 主题发起人 主题发起人 colonel
  • 开始时间 开始时间
C

colonel

Unregistered / Unconfirmed
GUEST, unregistred user!
函数定义为:function CheckFormatStr(Const Format, Str:String):Boolean;
参数说明:
Format:用法与函数Format中的Format参数一样(就是指定字符串格式)
Str:将要检查的字符串
注:当参数Format中有两个或多个相邻类型(%s、%d)相同时(%s%s或%d%d)将视为一个这样的类型如(%s%s=%s %d%d=%d)
例子:
CheckFormatStr('Item%d', 'Item1024') = True
CheckFormatStr('Item%sItem%d', 'Itemswfd456') =True
CheckFormatStr('%s%d','Itemsadf') = False
 
函数定义为:function CheckFormatStr(Const Format, Str:String):Boolean;
参数说明:
Format:用法与函数Format中的Format参数一样(就是指定字符串格式)
Str:将要检查的字符串
注:当参数Format中有两个或多个相邻类型(%s、%d)相同时(%s%s或%d%d)将视为一个这样的类型如(%s%s=%s %d%d=%d)
例子:
CheckFormatStr('Item%d', 'Item1024') = True
CheckFormatStr('Item%sItem%d', 'Itemswfd456') =True
CheckFormatStr('%s%d','Itemsadf') = False
 
没太看明白
 
有这个必要吗?
考虑过速度吗?
 
这个其实就是正规表达式的简化版本嘛。
试试看尝试用正规表达式的控件包吧。
 
大致就是这样子的吧,写出来大家看看

function CheckFormatStr(Const Format, Str:String):Boolean;
var
i,j,l1,l2,l,FormatCou,_FormatCou,StrCou:integer;
c:char;
CheckFormatOK:boolean;
begin
if (Format<>'') and (Str<>'') then
begin
i:=1;
j:=1;
l1:=Length(Format);
l2:=Length(Str);
FormatCou:=0;
StrCou:=0;
CheckFormatOK:=true;
c:=#32;
While CheckFormatOK and ((i<=l1) or (j<=l2)) do
begin
_FormatCou:=FormatCou;
if (Format='%') and (i<l1) and (Format[i+1] in ['s','d']) then
begin
if c<>Format[i+1] then
begin
c:=Format[i+1];
inc(FormatCou)
end;
inc(i,2)
end
else
begin
c:='c';
inc(FormatCou)
end;
if FormatCou<>_FormatCou then
begin
l:=0;
While CheckFormatOK and (j<=l2) do
begin
case c of
'c':
begin
CheckFormatOK:=(i<=l1) and (Format<>'%') and (Format=Str[j]);
if CheckFormatOK then
inc(i)
end;
's':
CheckFormatOK:=not (Str[j] in ['0'..'9']);
'd':
CheckFormatOK:=Str[j] in ['0'..'9']
end;
if CheckFormatOK then
begin
inc(l);
inc(j)
end
end;
CheckFormatOK:=l>0;
if CheckFormatOK then
inc(StrCou)
end
end;
Result:=(FormatCou>0) and (FormatCou=StrCou)
end
else
Result:=false
end;
 
多人接受答案了。
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部