C ++ fuzzy string matching

  C ++ basically has no regular expression function, of course, like the regularity provided in Boost. This article comes from an article by bloggers, please see:
  
  C / C ++ string fuzzy matching
  
  has read this article a long time ago, the original author's needs are very clear, and the code implementation is also very good.
  
  The reason why I wrote this article again is because the original author only introduced that it can be achieved by directly calling the system function fnmatch under the Linux system, without considering the use in Windows.
  
  I looked at the Google-glog code this week and happened to find a simple implementation similar to fnmatch, so it provides a cross-platform interface.
  
  Take the original author's requirements directly as an example (Thanks again to the original author Mr. Big Bear, this is my doctrine):
  
  Requirements: The
  
  access authorization configuration file is sometimes divided into several dimensions for configuration, such as company | product | sys Format configuration:
  
  1. Configure "sina | weibo | pusher" to indicate that the sina company's weibo product pusher system can be admitted, and "sina | weibo | sign" does not allow access
  
  . 2. Configure "sina | * | pusher" to indicate sina company All product pusher system can access
  
  the configuration 3. "* | * | pusher" means that all the company's all products pusher systems are able to access
  
  the code to achieve the following:
  
  mamicode.com, yards lost
  
  1 #ifdef OS_WINDOWS
  
  2 / * Bits set in the FLAGS argument to `fnmatch '. copy from fnmatch.h (linux) * /
  
  3 #define FNM_PATHNAME (1 << 0) /* No wildcard can ever match `/‘. */
  
  4 #define FNM_NOESCAPE (1 << 1) /* Backslashes don‘t quote special chars. */
  
  5 #define FNM_PERIOD (1 << 2) /* Leading `.‘ is matched only explicitly. */
  
  6 #define FNM_NOMATCH 1
  
  7
  
  8 #define fnmatch fnmatch_win
  
  9
  
  10 /**copy from Google-glog*/
  
  11 bool SafeFNMatch(const char* pattern,size_t patt_len,const char* str,size_t str_len)
  
  12 {
  
  13 size_t p = 0;
  
  14 size_t s = 0;
  
  15 while (1)
  
  16 {
  
  17 if (p == patt_len && s == str_len)
  
  18 return true;
  
  19 if (p == patt_len)
  
  20 return false;
  
  21 if (s == str_len)
  
  22 return p + 1 == patt_len && pattern [p] == '*';
  
  23 if (pattern [p] == str [s] || pattern [p] == '?')
  
  24 {
  
  25 p + = 1;
  
  26 s + = 1;
  
  27 continue;
  
  28}
  
  29 if (pattern [p] == '*')
  
  30 {
  
  31 if (p + 1 == patt_len) return true;
  
  32 do
  
  33 {
  
  34 if (SafeFNMatch ( pattern + (p + 1), patt_len- (p + 1), str + s, str_len-s))
  
  35 {
  
  36 return true;
  
  37}
  
  38 s + = 1;
  
  39} while (s! = str_len);
  
  40
  
  41 return false;
  
  42}
  
  43
  
  44 return false;
  
  45}
  
  46}
  
  47
  
  48 / ** Note: The function of the last parameter flags has not been implemented on the Windows platform! ! ! * /
  
  49 int fnmatch_win(const char *pattern, const char *name, int flags = 0)
  
  50 {
  
  51 if(SafeFNMatch(pattern,strlen(pattern),name,strlen(name)))
  
  52 return 0;
  
  53 else
  
  54 return FNM_NOMATCH;
  
  55 }
  
  56
  
  57 #else
  
  58 #include <fnmatch.h>
  
  59 #endif
  
  60
  
  61 int main()
  
  62 {
  
  63 const char* orgin_str = "sina|weibo|pusher";
  
  64 char pattern_arr[][20] = {
  
  65 {"sina|*|pusher"},
  
  66 {"sina|*|*"},
  
  67 {"*|weibo|*"},
  
  68 //不能被匹配的
  
  69 {"sina|pic|*"},
  
  70 {"*|*|sign"},
  
  71 {"*|weibo|sign"},
  
  72 {"*|pic|sign"},
  
  73 {"sina|pic|sign"},
  
  74
  
  75 {"*|*|*"}
  
  76 };
  
  77 static int pattern_arr_size = sizeof(pattern_arr) / sizeof(pattern_arr[0]);
  
  78
  
  79 vector<char *> vec_str;
  
  80 for(int i = 0; i < pattern_arr_size; i ++)
  
  81 {
  
  82 vec_str.push_back(pattern_arr[i]);
  
  83 }
  
  84
  
  85 std::cout << "Origin Str: " << orgin_str << "\n\n";
  
  86 int ret;
  
  87 for(int i = 0; i < vec_str.size(); i++)
  
  88 {
  
  89 ret = fnmatch(vec_str.at(i), orgin_str, FNM_PATHNAME);
  
  90 if(ret == FNM_NOMATCH)
  
  91 {
  
  92 cout<<"sorry, I‘m failed: ["<< vec_str.at(i) <<"]\n";
  
  93 }
  
  94 else
  
  95 {
  
  96 cout << "OK, I'm success: [" << vec_str.at (i) << "] \ n";
  
  97}
  
  98}
  
  99
  
  100 return 0;
  
  101}
  
  mamicode.com,
  
  please complete the code for fans See: string fuzzy matching (fnmatch) .cpp. The output is as follows:
  
  mamicode.com, code fan

 

 

https://www.cnblogs.com/zhenhua1618/category/1731527.html
https://www.cnblogs.com/zhenhua1618/category/1731528.html
https://www.cnblogs.com/zhenhua1618/category/1731531.html
https://www.cnblogs.com/zhenhua1618/category/1731532.html
https://www.cnblogs.com/zhenhua1618/category/1731533.html
https://www.cnblogs.com/zhenhua1618/category/1731534.html
https://www.cnblogs.com/zhenhua1618/category/1731536.html
https://www.cnblogs.com/zhenhua1618/category/1731538.html
https://www.cnblogs.com/zhenhua1618/category/1731540.html
https://www.cnblogs.com/zhenhua1618/category/1731543.html
https://www.cnblogs.com/zhenhua1618/category/1731545.html
https://www.cnblogs.com/zhenhua1618/category/1731547.html
https://www.cnblogs.com/zhenhua1618/category/1731550.html
https://www.cnblogs.com/zhenhua1618/category/1731552.html
https://www.cnblogs.com/zhenhua1618/category/1731555.html
https://www.cnblogs.com/zhenhua1618/category/1731557.html
https://www.cnblogs.com/zhenhua1618/category/1731560.html
https://www.cnblogs.com/zhenhua1618/category/1731562.html
https://www.cnblogs.com/zhenhua1618/category/1731564.html
https://www.cnblogs.com/zhenhua1618/category/1731567.html
https://www.cnblogs.com/zhenhua1618/category/1731569.html
https://www.cnblogs.com/zhenhua1618/category/1731571.html
https://www.cnblogs.com/zhenhua1618/category/1731574.html
https://www.cnblogs.com/zhenhua1618/category/1731576.html
https://www.cnblogs.com/zhenhua1618/category/1731579.html
https://www.cnblogs.com/zhenhua1618/category/1731580.html
https://www.cnblogs.com/zhenhua1618/category/1731582.html
https://www.cnblogs.com/zhenhua1618/category/1731586.html
https://www.cnblogs.com/zhenhua1618/category/1731589.html
https://www.cnblogs.com/zhenhua1618/category/1731591.html
https://www.cnblogs.com/zhenhua1618/category/1731594.html
https://www.cnblogs.com/zhenhua1618/category/1731596.html
https://www.cnblogs.com/zhenhua1618/category/1731600.html
https://www.cnblogs.com/zhenhua1618/category/1731602.html
https://www.cnblogs.com/zhenhua1618/category/1731604.html
https://www.cnblogs.com/zhenhua1618/category/1731607.html
https://www.cnblogs.com/zhenhua1618/category/1731609.html
https://www.cnblogs.com/zhenhua1618/category/1731611.html
https://www.cnblogs.com/zhenhua1618/category/1731614.html
https://www.cnblogs.com/zhenhua1618/category/1731616.html
https://www.cnblogs.com/zhenhua1618/category/1731620.html
https://www.cnblogs.com/zhenhua1618/category/1731622.html
https://www.cnblogs.com/zhenhua1618/category/1731624.html
https://www.cnblogs.com/zhenhua1618/category/1731627.html
https://www.cnblogs.com/zhenhua1618/category/1731629.html
https://www.cnblogs.com/zhenhua1618/category/1731631.html
https://www.cnblogs.com/zhenhua1618/category/1731634.html
https://www.cnblogs.com/zhenhua1618/category/1731636.html
https://www.cnblogs.com/zhenhua1618/category/1731638.html
https://www.cnblogs.com/zhenhua1618/category/1731641.html
https://www.cnblogs.com/zhenhua1618/category/1731643.html
https://www.cnblogs.com/zhenhua1618/category/1731646.html
https://www.cnblogs.com/zhenhua1618/category/1731648.html
https://www.cnblogs.com/zhenhua1618/category/1731651.html
https://www.cnblogs.com/zhenhua1618/category/1731654.html
https://www.cnblogs.com/zhenhua1618/category/1731656.html
https://www.cnblogs.com/zhenhua1618/category/1731660.html
https://www.cnblogs.com/zhenhua1618/category/1731662.html
https://www.cnblogs.com/zhenhua1618/category/1731665.html
https://www.cnblogs.com/zhenhua1618/category/1731667.html
https://www.cnblogs.com/zhenhua1618/category/1731669.html
https://www.cnblogs.com/zhenhua1618/category/1731672.html
https://www.cnblogs.com/zhenhua1618/category/1731674.html
https://www.cnblogs.com/zhenhua1618/category/1731677.html
https://www.cnblogs.com/zhenhua1618/category/1731679.html
https://www.cnblogs.com/zhenhua1618/category/1731681.html
https://www.cnblogs.com/zhenhua1618/category/1731683.html
https://www.cnblogs.com/zhenhua1618/category/1731686.html
https://www.cnblogs.com/zhenhua1618/category/1731688.html
https://www.cnblogs.com/zhenhua1618/category/1731691.html
https://www.cnblogs.com/zhenhua1618/category/1731694.html
https://www.cnblogs.com/zhenhua1618/category/1731696.html
https://www.cnblogs.com/zhenhua1618/category/1731698.html
https://www.cnblogs.com/zhenhua1618/category/1731701.html
https://www.cnblogs.com/zhenhua1618/category/1731703.html
https://www.cnblogs.com/zhenhua1618/category/1731706.html
https://www.cnblogs.com/zhenhua1618/category/1731708.html
https://www.cnblogs.com/zhenhua1618/category/1731710.html
https://www.cnblogs.com/zhenhua1618/category/1731712.html
https://www.cnblogs.com/zhenhua1618/category/1731715.html
https://www.cnblogs.com/zhenhua1618/category/1731717.html
https://www.cnblogs.com/zhenhua1618/category/1731719.html
https://www.cnblogs.com/zhenhua1618/category/1731754.html
https://www.cnblogs.com/zhenhua1618/category/1731755.html
https://www.cnblogs.com/zhenhua1618/category/1731756.html
https://www.cnblogs.com/zhenhua1618/category/1731758.html
https://www.cnblogs.com/zhenhua1618/category/1731759.html
https://www.cnblogs.com/zhenhua1618/category/1731760.html
https://www.cnblogs.com/zhenhua1618/category/1731762.html
https://www.cnblogs.com/zhenhua1618/category/1731763.html
https://www.cnblogs.com/zhenhua1618/category/1731765.html
https://www.cnblogs.com/zhenhua1618/category/1731766.html
https://www.cnblogs.com/zhenhua1618/category/1731767.html
https://www.cnblogs.com/zhenhua1618/category/1731768.html
https://www.cnblogs.com/zhenhua1618/category/1731770.html
https://www.cnblogs.com/zhenhua1618/category/1731771.html
https://www.cnblogs.com/zhenhua1618/category/1731772.html
https://www.cnblogs.com/zhenhua1618/category/1731773.html
https://www.cnblogs.com/zhenhua1618/category/1731775.html
https://www.cnblogs.com/zhenhua1618/category/1731776.html
https://www.cnblogs.com/zhenhua1618/category/1731777.html
https://www.cnblogs.com/zhenhua1618/category/1731779.html
https://www.cnblogs.com/zhenhua1618/category/1731780.html
https://www.cnblogs.com/zhenhua1618/category/1731782.html
https://www.cnblogs.com/zhenhua1618/category/1731783.html
https://www.cnblogs.com/zhenhua1618/category/1731785.html
https://www.cnblogs.com/zhenhua1618/category/1731786.html
https://www.cnblogs.com/zhenhua1618/category/1731787.html
https://www.cnblogs.com/zhenhua1618/category/1731788.html
https://www.cnblogs.com/zhenhua1618/category/1731790.html
https://www.cnblogs.com/zhenhua1618/category/1731791.html
https://www.cnblogs.com/zhenhua1618/category/1731793.html
https://www.cnblogs.com/zhenhua1618/category/1731794.html
https://www.cnblogs.com/zhenhua1618/category/1731795.html
https://www.cnblogs.com/zhenhua1618/category/1731797.html
https://www.cnblogs.com/zhenhua1618/category/1731798.html
https://www.cnblogs.com/zhenhua1618/category/1731800.html
https://www.cnblogs.com/zhenhua1618/category/1731802.html
https://www.cnblogs.com/zhenhua1618/category/1731804.html
https://www.cnblogs.com/zhenhua1618/category/1731807.html
https://www.cnblogs.com/zhenhua1618/category/1731808.html
https://www.cnblogs.com/zhenhua1618/category/1731811.html
https://www.cnblogs.com/zhenhua1618/category/1731812.html
https://www.cnblogs.com/zhenhua1618/category/1731814.html
https://www.cnblogs.com/zhenhua1618/category/1731816.html
https://www.cnblogs.com/zhenhua1618/category/1731818.html
https://www.cnblogs.com/zhenhua1618/category/1731821.html
https://www.cnblogs.com/zhenhua1618/category/1731822.html
https://www.cnblogs.com/zhenhua1618/category/1731825.html
https://www.cnblogs.com/zhenhua1618/category/1731826.html
https://www.cnblogs.com/zhenhua1618/category/1731828.html
https://www.cnblogs.com/zhenhua1618/category/1731831.html
https://www.cnblogs.com/zhenhua1618/category/1731832.html
https://www.cnblogs.com/zhenhua1618/category/1731834.html
https://www.cnblogs.com/zhenhua1618/category/1731837.html
https://www.cnblogs.com/zhenhua1618/category/1731839.html
https://www.cnblogs.com/zhenhua1618/category/1731841.html
https://www.cnblogs.com/zhenhua1618/category/1731843.html
https://www.cnblogs.com/zhenhua1618/category/1731846.html
https://www.cnblogs.com/zhenhua1618/category/1731848.html
https://www.cnblogs.com/zhenhua1618/category/1731850.html
https://www.cnblogs.com/zhenhua1618/category/1731852.html
https://www.cnblogs.com/zhenhua1618/category/1731856.html
https://www.cnblogs.com/zhenhua1618/category/1731857.html
https://www.cnblogs.com/zhenhua1618/category/1731859.html
https://www.cnblogs.com/zhenhua1618/category/1731863.html
https://www.cnblogs.com/zhenhua1618/category/1731864.html
https://www.cnblogs.com/zhenhua1618/category/1731866.html
https://www.cnblogs.com/zhenhua1618/category/1731868.html
https://www.cnblogs.com/zhenhua1618/category/1731870.html
https://www.cnblogs.com/zhenhua1618/category/1731871.html
https://www.cnblogs.com/zhenhua1618/category/1731874.html
https://www.cnblogs.com/zhenhua1618/category/1731876.html
https://www.cnblogs.com/zhenhua1618/category/1731878.html
https://www.cnblogs.com/zhenhua1618/category/1731880.html
https://www.cnblogs.com/zhenhua1618/category/1731881.html
https://www.cnblogs.com/zhenhua1618/category/1731884.html
https://www.cnblogs.com/zhenhua1618/category/1731886.html
https://www.cnblogs.com/zhenhua1618/category/1731887.html
https://www.cnblogs.com/zhenhua1618/category/1731890.html
https://www.cnblogs.com/zhenhua1618/category/1731891.html
https://www.cnblogs.com/zhenhua1618/category/1731893.html
https://www.cnblogs.com/zhenhua1618/category/1731895.html
https://www.cnblogs.com/zhenhua1618/category/1731896.html
https://www.cnblogs.com/zhenhua1618/category/1731898.html
https://www.cnblogs.com/zhenhua1618/category/1731899.html
https://www.cnblogs.com/zhenhua1618/category/1731901.html
https://www.cnblogs.com/zhenhua1618/category/1731903.html
https://www.cnblogs.com/zhenhua1618/category/1731904.html
https://www.cnblogs.com/zhenhua1618/category/1731906.html
https://www.cnblogs.com/zhenhua1618/category/1731907.html
https://www.cnblogs.com/zhenhua1618/category/1731909.html
https://www.cnblogs.com/zhenhua1618/category/1731911.html
https://www.cnblogs.com/zhenhua1618/category/1731912.html
https://www.cnblogs.com/zhenhua1618/category/1731914.html
https://www.cnblogs.com/zhenhua1618/category/1731915.html
https://www.cnblogs.com/zhenhua1618/category/1731917.html
https://www.cnblogs.com/zhenhua1618/category/1731919.html
https://www.cnblogs.com/zhenhua1618/category/1731920.html
https://www.cnblogs.com/zhenhua1618/category/1731922.html
https://www.cnblogs.com/zhenhua1618/category/1731923.html
https://www.cnblogs.com/zhenhua1618/category/1731925.html
https://www.cnblogs.com/zhenhua1618/category/1731927.html
https://www.cnblogs.com/zhenhua1618/category/1731928.html
https://www.cnblogs.com/zhenhua1618/category/1731930.html
https://www.cnblogs.com/zhenhua1618/category/1731932.html
https://www.cnblogs.com/zhenhua1618/category/1731933.html
https://www.cnblogs.com/zhenhua1618/category/1731935.html
https://www.cnblogs.com/zhenhua1618/category/1731936.html
https://www.cnblogs.com/zhenhua1618/category/1731938.html
https://www.cnblogs.com/zhenhua1618/category/1731940.html
https://www.cnblogs.com/zhenhua1618/category/1731941.html
https://www.cnblogs.com/zhenhua1618/category/1731943.html
https://www.cnblogs.com/zhenhua1618/category/1731945.html
https://www.cnblogs.com/zhenhua1618/category/1731946.html
https://www.cnblogs.com/zhenhua1618/category/1731948.html
https://www.cnblogs.com/zhenhua1618/category/1731949.html
https://www.cnblogs.com/zhenhua1618/category/1731951.html
https://www.cnblogs.com/zhenhua1618/category/1731954.html
https://www.cnblogs.com/zhenhua1618/category/1731956.html
https://www.cnblogs.com/zhenhua1618/category/1731958.html
https://www.cnblogs.com/zhenhua1618/category/1731960.html
https://www.cnblogs.com/zhenhua1618/category/1731963.html
https://www.cnblogs.com/zhenhua1618/category/1731966.html

Guess you like

Origin www.cnblogs.com/zhenhua1618/p/12729385.html