Dieser Code funktioniert nichtkorrekt. Er arbeitet vor allem bei bestimmten nicht korrekt.
wild = "*?.abc", str = "abc.abc".
Ohne Rekursion ist das nicht zu machen...
bool Match(PCTSTR pszText, PCTSTR pszMatch, bool bMatchCase=false)
{
// Loop over the string
while (*pszText && *pszMatch!=_T('*'))
{
// Found a match on a next normal character
if ((bMatchCase ?
*pszText!=*pszMatch :
CharUpper(reinterpret_cast<PTSTR>(MAKELONG(*pszText,0)))!=CharUpper(reinterpret_cast<PTSTR>(MAKELONG(*pszMatch,0)))) &&
*pszMatch!=_T('?'))
return false;
// still a match
pszMatch++;
pszText++;
}
// Either we have a wildcard or or we are at end of the string to test
if (!*pszText)
{
// There is a special case were there is only a wildcard char left
// on the match string, so we just skip it
while (*pszMatch==_T('*'))
++pszMatch;
// it would be a match if both strings reached the end of the string
return !*pszText && !*pszMatch;
}
else
{
// We found a wildcard '*'. We have some chances now:
// 1. we just ignore the wildcard and continue
// 2. we just skip 1 character in the source and reuse the wildcard
if (Match(pszText,pszMatch+1,bMatchCase))
return true;
else
return Match(pszText+1,pszMatch,bMatchCase);
}
}