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;
    }
  • 相关阅读:
    Maven 打war包
    linuxan安装redis出现Newer version of jemalloc required错误
    Linux常用命令
    Linux重启和关机命令
    CentOS 端口和防火墙操作
    修改root密码
    Web登录验证之 Shiro
    No WebApplicationContext found: no ContextLoaderListener registered
    java写文件实现换行
    gcc命令详解
  • 原文地址:https://www.cnblogs.com/monotone/p/3992791.html
Copyright © 2011-2022 走看看