文件名匹配算法(windows下的[*?])

文件名匹配算法(windows下的[*?])
/* fn_compare.hpp
sdragonx 2015-02-25 14:32:54
*/#ifndef FN_COMPARE_HPP_20150225143254#define FN_COMPARE_HPP_20150225143254 #include <string> #define _CGL_BEGIN cgl{#define _CGL_END } #define cstring std::basic_string _CGL_BEGIN /* 模糊查找文件名matching 例: bool b = fn_compare("abc.txt", "a?c.*"); sdragonx 2010-09-20 16:01*/ template<typename _char_t>bool fn_compare(const cstring<_char_t>& fname, const cstring<_char_t>& findstr){ //const static cstring<_char_t> mark = "*?"; _char_t mark[4] = { '*', '?' }; if(fname.empty() || findstr.empty()) { return false; } if(findstr.find_first_of(mark) == cstring<_char_t>::npos) { return fname.find(findstr) != cstring<_char_t>::npos; } else { size_t n = 0; for(size_t i = 0; i<findstr.size(); ) { if(findstr[i] == '*') { i = findstr.find_first_not_of(mark, i); if(i == cstring<_char_t>::npos){ return true; } n = fname.find(findstr[i], n); if(n == cstring<_char_t>::npos){ return false; } } else if(findstr[i] == '?') { ++n; ++i; } else { //while(mark.find(findstr[i]) == cstring<_char_t>::npos) while(findstr[i] != '*' && findstr[i] != '?') { if(!findstr[i]){ return true; } else if(fname[n++] != findstr[i++]){ return false; } } } } return !(n < fname.size()); }} _CGL_END #endif //FN_COMPARE_HPP_20150225143254

应用:

char* filename = "abc/a.txt";

bool n = fn_compare(filename, "abc/*.tx?");
n == yes

bool n = fn_compare(filename, "abc/*.bmp");
n == no

bool n = fn_compare(filename, "a?c/*.txt");
n == yes

文章发布于 2017-02-04 07:44:02 CSDN,现转博客园。

推荐阅读

    微软WindowsXP-不朽的传说

    微软WindowsXP-不朽的传说,,据国外媒体报道,目前,微软本身存在一个问题,或者,确切地说,是由3个矛盾构成的大问题: 1,WindowsXP太成功了,但只有它

    Win7电脑屏幕模糊的原因及解决办法

    Win7电脑屏幕模糊的原因及解决办法,解决办法,电脑屏幕,  在办公室工作时,我们总是需要长时间对着电脑,这时候电脑屏幕的清晰度对我们的眼

    mac苹果电脑和windows|mac和笔记本

    mac苹果电脑和windows|mac和笔记本,,1. mac和笔记本个人认为同等预算下,优先购买苹果笔记本,mini小主机没有屏幕显示器,就是台纯主机,不适合移

    Windows2000的一些特权

    Windows2000的一些特权,,让我们谈谈2000个特权中的一些。 权限为本地管理员提供了一种控制权限的方式,或者执行什么类型的系统操作。 比

    Windows7下固态硬盘的优化技术

    Windows7下固态硬盘的优化技术,,当微软开发Windows Vista时,固态硬盘没有那么热,所以没有进行优化。Windows 7是不同的。微软从一开始就把SS

    Windows8开发版系统高清系统接口图

    Windows8开发版系统高清系统接口图,,今天,微软发布,目前由开发者体验版Windows 8操作系统为整个英文系统,Windows 8带来了一系列新功能,没有折