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

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

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

原創(chuàng)代碼。

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

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;//用于分段標記,'*'分隔的字符串
  int p1 = 0, p2 = 0;
 
  while (p1<len1 && p2<len2)
  {
    if (pattern[p2] == '?')
    {
      p1++;
      p2++;
      continue;
    }
    if (pattern[p2] == '*')
    {
      /*如果當前是*號,則mark前面一部分已經(jīng)獲得匹配,
      *從當前點開始繼續(xù)下一個塊的匹配
      */
      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需要返回到下一個位置。
      * 因為*前已經(jīng)獲得匹配,所以mark打標之前的不需要再比較
      */
      p1 -= p2 - mark - 1;
      p2 = mark;
      continue;
    }
    /*
    * 此處處理相等的情況
    */
    p1++;
    p2++;
  }
  if (p2 == len2)
  {
    if (p1 == len1)
    {
      /*
      * 兩個字符串都結(jié)束了,說明模式匹配成功
      */
      return true;
    }
    if (pattern[p2 - 1] == '*')
    {
      /*
      * str1還沒有結(jié)束,但pattern的最后一個字符是*,所以匹配成功
      *
      */
      return true;
    }
  }
  while (p2<len2)
  {
    /*
    * pattern多出的字符只要有一個不是*,匹配失敗
    *
    */
    if (pattern[p2] != '*')
      return false;
    p2++;
  }
  return true;
}

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

昌吉市| 洛扎县| 兰溪市| 来宾市| 东乡| 嘉黎县| 临沂市| 云安县| 韶山市| 廉江市| 廉江市| 中江县| 邯郸县| 繁昌县| 陕西省| 中牟县| 乌兰浩特市| 延庆县| 大石桥市| 玉溪市| 秦安县| 来安县| 菏泽市| 蛟河市| 柳江县| 西乡县| 名山县| 资阳市| 虹口区| 阿克陶县| 富源县| 达州市| 临沭县| 三原县| 孟津县| 托克逊县| 千阳县| 池州市| 高州市| 彭阳县| 苏州市|