带’*’号字符串的匹配
目标:
判断源字符串中是否含有指定子串,子串可能会有*号通配符。
初步测试没问题。记录下来。后面要是有问题再来纠正。
#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;
}
带’*’号字符串的匹配的更多相关文章
- (转)MySQL数据表中带LIKE的字符匹配查询
MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56 百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...
- Delphi 自带的字符串分割函数split
下面介绍Delphi自带的字符串分割函数,根据你的需要来使用. 1.ExtractStrings function ExtractStrings(Separators, WhiteSpace: TSy ...
- js获取带#号链接后的参数
现在许多的主流网站都将'#'大规模用于重要URL中,我们通过正则表达式和window.location.search获取参数已经行不通了. 一.'#'号是什么 1.#代表网页中的一个位置.其后面的字符 ...
- url带#号,微信支付那些坑
现在前端很多框架的前端路由都带#号,主要为了做到无刷新跳转页面. 在微信公众号做微信支付时,配置的支付路径比如是http://www.eee.com/#/order,在调微信支付的方法时错误信息是'U ...
- Oracle添加数据报文字与格式字符串不匹配错误
今天在学习Oracle时碰到一个错:文字与格式字符串不匹配. 我在Oracle数据库中创建了一张表: --创建员工表employee create table employee ( empon ) n ...
- oracle文字与格式字符串不匹配的解决
oracle文字与格式字符串不匹配的解决 oracle的日期时间类型 在往oracle的date类型插入数据的时候,记得要用to_date()方法. 如insert into CUSLOGS(STAR ...
- Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...
- java.sql.SQLException:ORA-01861:文字和格式字符串不匹配
1.错误描述 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配 2.错误原因 字段名为statis_date在数据库中存储的数据类型是Date,而在Java中拼接 ...
- 异常-----java.sql.SQLException:ORA-01861:文字和格式字符串不匹配
1.错误描述 java.sql.SQLException:ORA-01861:文字和格式字符串不匹配 2.错误原因 字段名为statis_date在数据库中存储的数据类型是Date,而在Java中拼接 ...
随机推荐
- SVN在Android Studio中的配置
在AndroidStudio中开发版本控制,除了Git就是SVN,和Eclipse不同Android Studio没有提供单独的插件,只能和SVN客户端关联使用,和Eclipse安装有很大区别,下面介 ...
- Android 交错 GridView
原文地址 本文演示在你的 Android 应用程序中显示交错 GridView(Staggered GridView ). 下载 Demo 交错 GridView 交错 GridView 只是具有不等 ...
- jQuery事件与动画
一 事件 1 加载DOM事件 $(document).ready():执行时机:DOM元素准备就绪 执行次数:多次 简单写法:原:$(document).ready(function(){}) ...
- dl标签和table标签
dl标签定义了一个定义列表 <html> <body> <h2>一个定义列表:</h2> <dl> <dt>计算机</ ...
- C#判断程序是否以管理员身份运行,否则以管理员身份重新打开
/// <summary> /// 判断程序是否是以管理员身份运行. /// </summary> public static bool IsRunAsAdmin() { Wi ...
- 关于.NET中的验证码
常用的生成验证码程序 ,图片效果如下: 源程序如下: 复制代码 代码如下:using System; using System.IO; using System.Drawing; using Syst ...
- Java集合类笔试题
介绍Collection框架的结构 Collection接口是单值存放的最大父接口,可以向其中保存多个单值的数据(所谓单值就是指集合中的每个元素都是一个对象).其子接口主要有:List.Set.Que ...
- Secure CRT 如何连接虚拟机里面的CentOS系统 当主机使用有线网的时候 作者原创 欢迎转载
1.虚拟机的网卡配置如下图所示: 2.在CentOS 5.8的命令行界面:输入如下指令 然后准备修改里面的网关地址和自己的IP地址 3.同时查看自己的IP地址和网关 4.在第二步里面修改,网关地址应该 ...
- python3.5文档
https://docs.python.org/3.5/tutorial/modules.html#packages
- li的border无法和上边对齐
如果利用border设置四周的border,如果一边的边框比较长无法对齐 解决办法: .test{ position: relative; border: 1px solid #808080; hei ...