最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言實(shí)現(xiàn)的帶通配符匹配算法

 更新時(shí)間:2015年03月23日 10:46:18   投稿:hebedich  
這篇文章主要介紹了c語言實(shí)現(xiàn)的帶通配符匹配算法,需要的朋友可以參考下

原創(chuàng)代碼。

‘?'代表任意單個(gè)字符,‘*'代表任意0個(gè)或多個(gè)字符。常用于文件的搜素匹配。

bool MatchWithAsteriskW(wchar_t* str1, wchar_t* pattern)
{
  if (str1 == NULL) return false;
  if (pattern == NULL) return false;
  int len1 = lstrlenW(str1);
  int len2 = lstrlenW(pattern);
  int mark = 0;//用于分段標(biāo)記,'*'分隔的字符串
  int p1 = 0, p2 = 0;
 
  while (p1<len1 && p2<len2)
  {
    if (pattern[p2] == '?')
    {
      p1++;
      p2++;
      continue;
    }
    if (pattern[p2] == '*')
    {
      /*如果當(dāng)前是*號(hào),則mark前面一部分已經(jīng)獲得匹配,
      *從當(dāng)前點(diǎn)開始繼續(xù)下一個(gè)塊的匹配
      */
      p2++;
      mark = p2;
      continue;
    }
    if (str1[p1] != pattern[p2])
    {
      if (p1 == 0 && p2 == 0)
      {
        /*
        * 如果是首字符,特殊處理,不相同即匹配失敗
        */
        return false;
      }
      /*
      * pattern: ...*bdef*...
      *       ^
      *       mark
      *        ^
      *        p2
      *       ^
      *       new p2
      * str1:.....bdcf...
      *       ^
      *       p1
      *      ^
      *     new p1
      * 如上示意圖所示,在比到e和c處不想等
      * p2返回到mark處,
      * p1需要返回到下一個(gè)位置。
      * 因?yàn)?前已經(jīng)獲得匹配,所以mark打標(biāo)之前的不需要再比較
      */
      p1 -= p2 - mark - 1;
      p2 = mark;
      continue;
    }
    /*
    * 此處處理相等的情況
    */
    p1++;
    p2++;
  }
  if (p2 == len2)
  {
    if (p1 == len1)
    {
      /*
      * 兩個(gè)字符串都結(jié)束了,說明模式匹配成功
      */
      return true;
    }
    if (pattern[p2 - 1] == '*')
    {
      /*
      * str1還沒有結(jié)束,但pattern的最后一個(gè)字符是*,所以匹配成功
      *
      */
      return true;
    }
  }
  while (p2<len2)
  {
    /*
    * pattern多出的字符只要有一個(gè)不是*,匹配失敗
    *
    */
    if (pattern[p2] != '*')
      return false;
    p2++;
  }
  return true;
}

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • C++求斐波那契數(shù)的實(shí)例代碼

    C++求斐波那契數(shù)的實(shí)例代碼

    這篇文章介紹了C++求斐波那契數(shù)的實(shí)例代碼,有需要的朋友可以參考一下
    2013-10-10
  • C++讀寫Excel的實(shí)現(xiàn)方法詳解

    C++讀寫Excel的實(shí)現(xiàn)方法詳解

    本篇文章是對(duì)C++讀寫Excel的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C/C++實(shí)現(xiàn)跨文件共享全局變量詳解

    C/C++實(shí)現(xiàn)跨文件共享全局變量詳解

    這篇文章主要為大家詳細(xì)介紹了C/C++如何實(shí)現(xiàn)跨文件共享全局變量,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C++11實(shí)現(xiàn)字符串分割的示例

    C++11實(shí)現(xiàn)字符串分割的示例

    本文主要介紹了C++11實(shí)現(xiàn)字符串分割的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++實(shí)現(xiàn)將簡單密碼譯回原文的方法

    C++實(shí)現(xiàn)將簡單密碼譯回原文的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)將簡單密碼譯回原文的方法,可實(shí)現(xiàn)將簡單的字母位移類型的密碼譯回原文的功能,涉及C++簡單字符串操作相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • C語言?棧與數(shù)組的實(shí)現(xiàn)詳解

    C語言?棧與數(shù)組的實(shí)現(xiàn)詳解

    棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。向一個(gè)棧插入新元素又稱作進(jìn)棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素
    2022-04-04
  • C++實(shí)現(xiàn)自底向上的歸并排序算法

    C++實(shí)現(xiàn)自底向上的歸并排序算法

    這篇文章主要介紹了C++實(shí)現(xiàn)自底向上的歸并排序算法,結(jié)合實(shí)例形式較為詳細(xì)的分析總結(jié)了自底向上的歸并排序算法的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12
  • C語言實(shí)現(xiàn)推箱子游戲完整代碼

    C語言實(shí)現(xiàn)推箱子游戲完整代碼

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)推箱子游戲完整代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言入門篇--充分理解操作符

    C語言入門篇--充分理解操作符

    本篇文章是基礎(chǔ)篇,適合c語言剛?cè)腴T的朋友,本文主要介紹了c語言的操作符基礎(chǔ)理論,希望可以幫助大家快速入門c語言的世界,更好的理解c語言
    2021-08-08
  • C++ 中CloseHandle 函數(shù)--關(guān)閉一個(gè)句柄

    C++ 中CloseHandle 函數(shù)--關(guān)閉一個(gè)句柄

    這篇文章主要介紹了C++ 中CloseHandle 函數(shù)--關(guān)閉一個(gè)句柄的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

若羌县| 左云县| 罗田县| 高平市| 龙陵县| 怀宁县| 垫江县| 宁武县| 宜君县| 连城县| 大余县| 堆龙德庆县| 淮北市| 孟津县| 洛阳市| 新蔡县| 南阳市| 肥东县| 文登市| 郎溪县| 富川| 马公市| 阿瓦提县| 安西县| 昌都县| 浦城县| 聂荣县| 通辽市| 宁乡县| 武强县| 广州市| 博客| 金乡县| 阿合奇县| 江都市| 巫溪县| 嘉黎县| 扎赉特旗| 广昌县| 尼勒克县| 长阳|