字符串匹配通配符"*、?"

bool IsMatch(CString s, CString p)
{
    int j = 0;
    for (int i = 0, last_p = 0, s_start = 0; i < s.GetLength();)
    {
        if (j < p.GetLength() && (s[i] == p[j] || p[j] == '?'))//
        {
            i++;
            j++;
        }
        else if (j < p.GetLength() && p[j] == '*')
        {
            s_start = i;
            last_p = ++j;
        }
        else if (last_p != 0)
        {
            i = s_start++;
            j = last_p;
        }
        else
        {
            return false;
        }
    }
    for (; j < p.GetLength() && p[j] == '*'; ++j);
    return j == p.GetLength();
}

注:

*:匹配任意多个

?:匹配任意一个

形参

s:要搜索的字符串,例如:“a1b2c3”

p:匹配规则,例如:“a?b*”

 
posted @ 2021-07-13 12:45  快雪  阅读(574)  评论(0)    收藏  举报