目标:

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

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

#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. ASCII码表及键盘码表。

             ASCII码表 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 @ 96 . 1 SOH 33 ...

  2. JavaScript高级编程II

         原文地址: http://www.onlamp.com/pub/a/onlamp/2007/08/23/advanced-javascript-ii.html?page=1 在前面的文章中, ...

  3. SlidingMenu导入编译用法--Eclipse和IDEA

    非常多側滑的应用都用的是开源库SlidingMenu, 效果不错,下面是我用上的效果图,因为近期换成了IDEA(IntelliJ)编辑器,昨天上网找了全部的教程都是关于在Eclipse导入的方法,摸索 ...

  4. [转] java中注解的使用与实例

    注解目前非常的流行,很多主流框架都支持注解,而且自己编写代码的时候也会尽量的去用注解,一时方便,而是代码更加简洁. 注解的语法比较简单,除了@符号的使用之外,它基本与Java固有语法一致.Java S ...

  5. js禁止浏览器滚屏方法

    在有些需求中需要对页面进行限制页面的查看权限,阻止用户滚动浏览器.那么我们就要禁止鼠标的滚动事件,并且如果浏览器的滚动事件一旦触发我们就将滚动条重置为0就可以了.以下是具体代码: //出现滚动值立马归 ...

  6. TCP Linger的坑

    昨天和同事奋战几个小时,解决了一个linger造成的bug. 现象是这样的,这是一个我从原型接手,扩充了各种功能成为可用代码的epoll实现的非阻塞socket server程序,接收大量的短连接,测 ...

  7. HUD 1251 难题统计

    /* 这题倒是没啥难度 字典树可搞 但是吧 空间是个问题 开始写成这样 struct node { int next[27],sum[27]; bool over; }t[maxn]; 死活过不了 开 ...

  8. ado.net(1)

    connection对象处于最顶层,是所有数据请求的关口 数据库连接过程 SqlConnection theConnection = new SqlConnection(); //创建一个connec ...

  9. jQuery幻灯插件:Nivo Slider

    使用步骤 1.引入css文件 default.css 设置展示插件所需的样式,像控制导航键,导航按钮样式,当然你可以自己写个样式 nivo-slider控制图片样式,插件所需的CSS文件 <li ...

  10. 微软分布式缓存 appfabric

    appfabric为微软自家产的分布式缓存解决方案,随dotnet4.0一起发布.目前版本为1.1