各位高手,小弟求一字符串匹配算法,算法规则如下!规则:有两个输入框,在第一个输入框内输入任意一串不包含‘?’和‘*’字符的字符串!在第二个输入框内输入任意思字符串,可以包含‘?’和‘*’字符!在第二个输入框内的‘?’字符可以匹配第一个输入框内的任意一个字符!‘*’字符可以匹配第一个输入框内的0到任意多个字符!操作:在第一个输入框内输入一个不包含‘?’和‘*’字符的字符串后,在第二个输入框内输入一个包含‘?’和‘*’字符的字符串来测试这两组字符串是否匹配!!!请高手帮帮忙!
调试欢乐多
在第二个输入框内输入:‘?211*1' 哪么这一组字符串是匹配的!
例二:在第一个输入框内输入:‘abc1289e'
在第二个输入框内输入:‘a?c*?9?' 哪么这一组字符串是匹配的!例三:在第一个输入框内输入:‘1211221’
在第二个输入框内输入:‘?*211?1' 哪么这一组字符串是不匹配的!有点像模糊查询的效果!!只要注意到‘?’和‘*’字符的用法就可以了!!!灵活性有点大!
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;
var
t: Integer;
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;
if Matchstrings('Sean Stanley', 'Sean*') then ShowMessage('strings match!');
if Matchstrings('Sean', 'Se?n') then ShowMessage('strings match!');
if not Matchstrings('Sean', 'Se?nn') then ShowMessage('strings don''t match!');
你的这个函数:
function IsPatternWild(pattern: PChar): Boolean;
var
t: Integer;
begin
Result := StrScan(pattern, '*') <> nil;
if not Result then Result := StrScan(pattern, '?') <> nil;
end;
后面没有用到,去掉也可以吧