支持通配符的字符串比较函数--200分敬上(200分)

  • 主题发起人 主题发起人 ncuwk
  • 开始时间 开始时间
N

ncuwk

Unregistered / Unconfirmed
GUEST, unregistred user!
支持*、?等通配符的字符串比较函数
*表示多个字符
?表示一个字符
需支持多个通配符
比如:
"ABC*ABC" 和 "ABCDE123ABC" 相符
"ABC?" 和 "ABCD" 相符
"A?C?" 和 "AACC" 相符
函数可以如下定义
bool CompareStrs(源字符串,含通配符的字符串)


 
你要的函数中,AB*AB和ABCD是否相等?是否必须是ABCDAB之类的?
 
给你一个函数:
function MatchStrings(source, pattern: String): Boolean;
var
pSource: Array [0..255] of Char;
pPattern: Array [0..255] of Char;

function MatchPattern(element, pattern: PChar): Boolean;

function IsPatternWild(pattern: PChar): Boolean;
begin
Result := StrScan(pattern,'*') <> nil;
if not Result then Result := StrScan(pattern,'?') <> nil;
end;

begin
if 0 = StrComp(pattern,'*') then
Result := True
else if (element^ = Chr(0)) and (pattern^ <> Chr(0)) then
Result := False
else if element^ = Chr(0) then
Result := True
else begin
case pattern^ of
'*': if MatchPattern(element,@pattern[1]) then
Result := True
else
Result := MatchPattern(@element[1],pattern);
'?': Result := MatchPattern(@element[1],@pattern[1]);
else
if element^ = pattern^ then
Result := MatchPattern(@element[1],@pattern[1])
else
Result := False;
end;
end;
end;

begin
StrPCopy(pSource,source);
StrPCopy(pPattern,pattern);
Result := MatchPattern(pSource,pPattern);
end;
注意:上面函数对 'AB*' 与 'ABxyz...' 来说,是匹配的。
 
后退
顶部