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;
    }
  • 相关阅读:
    九.GPIO中断试验3——GPIO中断驱动
    十.定时器EPIT——1EPIT的入门
    九.GPIO中断试验1——中断原理
    九.GPIO中断试验2——通用中断服务程序构成
    Django学习笔记〇六——项目2,图书管理系统
    博客项目——〇六 添加新文章——富文本编辑器、beautifulsoup的使用
    1月7日
    1月9日
    1月8日
    Scala泛型和上下界
  • 原文地址:https://www.cnblogs.com/monotone/p/3992791.html
Copyright © 2011-2022 走看看