下面一段函数实现带有S和*两种通配符的字符串的匹配功能。其中:$表示长度大于0的数字串,*表示任意长度的字符串。要求:按照自己对于算法的理解填写该函数的5个空白。可以应用strcmp,strcat,strlen等字符串操作函数,不要应用其它的C或者C++的库函数。请注意:必须是完全匹配才能返回true,比如21.txt和2a.txt可以匹配2*.txt,2.tx或者2.txta不能匹配*.txt。通配符可能出现多次。函数的参数与返回值的说明请参见函数的注释 // 功能描述:表达式是否匹配成功,$表示长度大于0的数字串,*表示任意长的字符串
// 输入参数: @pRule,以'\0'结束的字符串,表示规则;
// @pStr,以'\0'结束的待匹配的字符串;
// 返回值:true:匹配成功;false:匹配失败
bool IsRegularMatching(const char* pRule, const char* pStr)
{
const char* pTempRulePtr = pRule;
const char* pTempStrPtr = pStr;
unsigned int dwCount = 0;
unsigned int dwStrLen = (unsigned int)strlen(pStr);
while ((*pTempRulePtr != '\0') && (*pTempStrPtr != '\0'))
{
switch (_______________)
{
case '*':
pTempRulePtr = pTempRulePtr + 1;
if (*pTempRulePtr == '\0')
return true;
else
{
dwStrLen = (unsigned int)strlen(pTempStrPtr);
for (dwCount = 0; dwCount < dwStrLen; dwCount++)
{
if (_______________)
return true;
}
}
break;
case '$':
if (_______________)
return false;
while ((*pTempStrPtr != '\0') && (*pTempStrPtr >= '0')
&& (*pTempStrPtr <= '9'))
pTempStrPtr++;
pTempRulePtr++;
break;
default:
if (*pTempRulePtr != *pTempStrPtr)
_______________;
++pTempRulePtr;
++pTempStrPtr;
break;
}
}
if ((*pTempRulePtr != '\0') && (*pTempStrPtr == '\0'))
{
if (strcmp(pTempRulePtr, "*") == 0)
return true;
}
else
{
_______________;
}
return false;
}