zoukankan      html  css  js  c++  java
  • 带’*’号字符串的匹配

    目标:

    判断源字符串中是否含有指定子串,子串可能会有*号通配符。

    初步测试没问题。记录下来。后面要是有问题再来纠正。

    #include <string>
    using namespace std;
    
    // 带*号通配符的字符串匹配,'*'代表任意字符串,包括空字符串
    bool WildcardCaptureA(const char* lpszSour, const char* lpszMatch)
    {
        bool lbRet = false;
        do 
        {
            const char* lpszSrcStr = lpszSour;
            const char* lpszMatchStr = lpszMatch;
    
            // 不用比较的条件
            if(NULL == lpszSrcStr || 0 == lpszSrcStr[0]
                || NULL == lpszMatchStr || 0 == lpszMatchStr[0])
                break;
    
            // 排除首部的*号
            while('*' == lpszMatchStr[0])++lpszMatchStr;
            if(0 == lpszMatchStr[0])        // 全是*号,则认为任何字符串都匹配
            {
                lbRet = true;
                break;
            }
    
            string loStrWord;    
            // 取出第一个子串
            while('*' != lpszMatchStr[0] && 0 != lpszMatchStr[0])
            {
                loStrWord.push_back(lpszMatchStr[0]);
                ++lpszMatchStr;
            }
    
            // 匹配
            lpszSrcStr = strstr(lpszSrcStr, loStrWord.c_str());
            if(NULL == lpszSrcStr)
                break;
    
            // 继续匹配
            if(0 != lpszMatchStr[0] && false == WildcardCaptureA(++lpszSrcStr, lpszMatchStr))
                break;
    
            lbRet = true;
        } while (false);
        return lbRet;
    }
    
    
    // 带*号通配符的字符串匹配,'*'代表任意字符串,包括空字符串
    bool WildcardCaptureW(const wchar_t* lpszSour, const wchar_t* lpszMatch)
    {
        bool lbRet = false;
        do 
        {
            const wchar_t* lpszSrcStr = lpszSour;
            const wchar_t* lpszMatchStr = lpszMatch;
    
            // 不用比较的条件
            if(NULL == lpszSrcStr || 0 == lpszSrcStr[0]
            || NULL == lpszMatchStr || 0 == lpszMatchStr[0])
                break;
    
            // 排除首部的*号
            while('*' == lpszMatchStr[0])++lpszMatchStr;
            if(0 == lpszMatchStr[0])        // 全是*号,则认为任何字符串都匹配
            {
                lbRet = true;
                break;
            }
    
            wstring loStrWord;    
            // 取出第一个子串
            while('*' != lpszMatchStr[0] && 0 != lpszMatchStr[0])
            {
                loStrWord.push_back(lpszMatchStr[0]);
                ++lpszMatchStr;
            }
    
            // 匹配
            lpszSrcStr = wcsstr(lpszSrcStr, loStrWord.c_str());
            if(NULL == lpszSrcStr)
                break;
    
            // 继续匹配
            if(0 != lpszMatchStr[0] && false == WildcardCaptureW(++lpszSrcStr, lpszMatchStr))
                break;
    
            lbRet = true;
        } while (false);
        return lbRet;
    }
  • 相关阅读:
    ssh中的 Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
    Http中的Get/Post方法
    Node.js(day2)
    使用clipBoard.js进行页面内容复制
    SVG之图形的引用use、剪切clipPath和蒙板mask
    SVG之文本
    SVG之Path
    SVG之颜色、渐变和笔刷的使用
    SVG坐标系统
    SVG入门
  • 原文地址:https://www.cnblogs.com/monotone/p/3992791.html
Copyright © 2011-2022 走看看