| nbsp; if(nPattPos == nPatternLen)
return nTextPos - nPattPos;
else
return -1;
}
}
////////////////////////////////////////////////////////////////////////////////
// 函数名称:bool _strlike(
// char * chText,
// char * chPattern,
// int nbegpos )
// 实现功能:两个字符串的匹配算法,带通配符
// 对全局变量的影响:无
// 参数说明:
// chText 原字符串
// chPattern 模式串
// nbegpos 起始位置
// 返回结果说明:
// =true 表示相似或一致
// =false 表示不相似或不一致
////////////////////////////////////////////////////////////////////////////////
bool _strlike(char * chText , char * chPattern , int nbegpos /* = 0 */)
{
bool bLeftMatch = true , bLast = false;
int nTextLen = _tcslen(chText);
//作最基础的匹配,即存在模式串的情况下再作比较
if(_tcslen(chPattern) == 0)
if(_tcslen(chText) == 0)
return true;
else
return false;
do
{
char * chFirstPattern , * chSecondPattern;
if(chPattern[0] == '%')
{
do
{
chPattern ++;
}while(chPattern[0] == '%');
if(chPattern == NULL || _tcslen(chPattern) == 0)
return true;
bLeftMatch = false;
}
else
bLeftMatch = true;
//初始化模式串
chSecondPattern = _tcschr(chPattern , '%');
int nPatternLen;
if(chSecondPattern == NULL)
{
bLast = true;
nPatternLen = _tcslen(chPattern);
if(!bLeftMatch)
{
//若以%开头,并且没有剩余模式串时,只要考虑右对齐匹配的方式即可(实际上也是左对齐)
if(nbegpos + nPatternLen <= nTextLen)
{
nbegpos = nTextLen - nPatternLen;
bLeftMatch = true;
}
else
return false;
}
else
if(nbegpos + nPatternLen != nTextLen)
return false;
}
else
{
//模式串不得长于原串
nPatternLen = chSecondPattern - chPattern;
if(nbegpos + nPatternLen > nTextLen)
return false;
}
//初始化模式串与修改剩余串
chFirstPattern = new char[nPatternLen + 1];
memcpy(chFirstPattern , chPattern , nPatternLen);
chFirstPattern[nPatternLen] = 0;
chPattern = chSecondPattern;
int npos = _strat(chText , chFirstPattern , nbegpos , bLeftMatch ? nPatternLen : nTextLen - nbegpos , bLeftMatch);
delete chFirstPattern;
if(npos < 0)
{
return false;
}
else
{
//定下一查找位置的起点
if(bLeftMatch)
{
if(npos != nbegpos)
return false;
}
else
nbegpos = npos;
if(bLast)
{
&nb
|