目标:

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

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

#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;
}

带’*’号字符串的匹配的更多相关文章

  1. (转)MySQL数据表中带LIKE的字符匹配查询

    MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56    百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...

  2. Delphi 自带的字符串分割函数split

    下面介绍Delphi自带的字符串分割函数,根据你的需要来使用. 1.ExtractStrings function ExtractStrings(Separators, WhiteSpace: TSy ...

  3. js获取带#号链接后的参数

    现在许多的主流网站都将'#'大规模用于重要URL中,我们通过正则表达式和window.location.search获取参数已经行不通了. 一.'#'号是什么 1.#代表网页中的一个位置.其后面的字符 ...

  4. url带#号,微信支付那些坑

    现在前端很多框架的前端路由都带#号,主要为了做到无刷新跳转页面. 在微信公众号做微信支付时,配置的支付路径比如是http://www.eee.com/#/order,在调微信支付的方法时错误信息是'U ...

  5. Oracle添加数据报文字与格式字符串不匹配错误

    今天在学习Oracle时碰到一个错:文字与格式字符串不匹配. 我在Oracle数据库中创建了一张表: --创建员工表employee create table employee ( empon ) n ...

  6. oracle文字与格式字符串不匹配的解决

    oracle文字与格式字符串不匹配的解决 oracle的日期时间类型 在往oracle的date类型插入数据的时候,记得要用to_date()方法. 如insert into CUSLOGS(STAR ...

  7. Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较

    参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...

  8. java.sql.SQLException:ORA-01861:文字和格式字符串不匹配

    1.错误描述 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配 2.错误原因 字段名为statis_date在数据库中存储的数据类型是Date,而在Java中拼接 ...

  9. 异常-----java.sql.SQLException:ORA-01861:文字和格式字符串不匹配

    1.错误描述 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配 2.错误原因 字段名为statis_date在数据库中存储的数据类型是Date,而在Java中拼接 ...

随机推荐

  1. Html5选择图片并及时预览图片

    以往想要实现图片预览基本都是先传至服务器后等返回链接地址才能进行预览,使用Html5选择图片并及时预览图片的代码如下,使用起来更爽了. <!DOCTYPE html> <html l ...

  2. 使用JDK自带缓存(Cache)实现Cookie自动登陆

    自定义一个缓存类AdminCache package jw.admin.common; import jw.base.entity.Admin; import sun.security.util.Ca ...

  3. 第一章:在IDEA里搭建基于Forge的Minecraft mod开发环境

    <基于1.8 Forge的Minecraft mod制作经验分享> 网上关于Forge开发环境搭建的文章其实有不少,但大都是基于Eclipse的. 作为用Java开发的环境,怎么能没有ID ...

  4. RollPagerView的用法:

    RollPagerView的用法: /** * * @author smiling * @date 2016/10 */ Android Studio 导包: compile 'com.jude:ro ...

  5. apache的500错误是写到哪个文件里面

    apache的500错误是写到哪个文件里面

  6. C#判断程序是否以管理员身份运行,否则以管理员身份重新打开

    /// <summary> /// 判断程序是否是以管理员身份运行. /// </summary> public static bool IsRunAsAdmin() { Wi ...

  7. 华为S5300交换机配置基于接口的本地端口镜像

    配置思路 1.  将Ethernet0/0/20接口配置为观察端口(监控端口) 2.  将Ethernet0/0/1----Ethernet0/0/10接口配置为镜像端口 配置步骤 1.  配置观察端 ...

  8. Eclipse读取xml中文乱码问题解决

    解决eclipse读取xml时中文乱码报错问题 在eclipse.ini中加入下而一行 -Dfile.encoding=UTF-8

  9. cocos2dx之触摸事件

    要使精灵能够接收到触摸事件,无非要做三件事. 注册触摸事件; 接收触摸事件; 处理触摸事件. 下面就从这三点出发,来了解一下精灵如何响应触摸事件. 1.注册触摸事件 精灵类Poker继承Sprite和 ...

  10. Ecshop布局参考图

    文章列表页: article_cat.dwt 文章内容页: article.dwt 商品品牌页: brand.dwt 所有分类页: catalog.dwt 商品列表页: category.dwt 商品 ...