亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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;//用于分段標(biāo)記,'*'分隔的字符串
  int p1 = 0, p2 = 0;
 
  while (p1<len1 && p2<len2)
  {
    if (pattern[p2] == '?')
    {
      p1++;
      p2++;
      continue;
    }
    if (pattern[p2] == '*')
    {
      /*如果當(dāng)前是*號,則mark前面一部分已經(jīng)獲得匹配,
      *從當(dā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打標(biāo)之前的不需要再比較
      */
      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++中map的基本用法和嵌套用法實例分析

    c++中map的基本用法和嵌套用法實例分析

    這篇文章主要介紹了c++中map的基本用法和嵌套用法,以實例形式分析了map容器的基本使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C語言詳細講解常用字符串處理函數(shù)

    C語言詳細講解常用字符串處理函數(shù)

    在日常編程中,對于字符串的操作中我們都很習(xí)慣的使用一些C庫中自帶的函數(shù),并且關(guān)于字符串的操作函數(shù)基本都在 string.h 這個頭文件中。關(guān)于C庫字符串常用處理函數(shù)也是平時面試或者考試過程中非常喜歡考的,本文將帶大家手動來實現(xiàn)這些常用函數(shù)
    2022-05-05
  • C語言舉例講解i++與++i之間的區(qū)別

    C語言舉例講解i++與++i之間的區(qū)別

    這篇文章主要介紹了C語言中i++和++i的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++淺析析構(gòu)函數(shù)的特征

    C++淺析析構(gòu)函數(shù)的特征

    既然在創(chuàng)建對象時有構(gòu)造函數(shù)(給成員初始化),那么在銷毀對象時應(yīng)該還有一個清除成員變量數(shù)據(jù)的操作咯,析構(gòu)函數(shù)與構(gòu)造函數(shù)功能相反,析構(gòu)函數(shù)不是完成對象的銷毀,局部對象銷毀工作是由編譯器完成的。而對象在銷毀時會自動調(diào)用析構(gòu)函數(shù),完成類的一些資源清理工作
    2022-07-07
  • c++大數(shù)階乘的實現(xiàn)方法

    c++大數(shù)階乘的實現(xiàn)方法

    本篇文章對c++的大數(shù)階乘進行了代碼示例的介紹。需要的朋友參考下
    2013-05-05
  • OpenCV提取圖像中圓線上的數(shù)據(jù)具體流程

    OpenCV提取圖像中圓線上的數(shù)據(jù)具體流程

    在對圖像進行處理時,經(jīng)常會要提取出圖像中某條直線、圓線或者ROI區(qū)域內(nèi)的感興趣數(shù)據(jù),進行重點關(guān)注。本文主要介紹了利用OpenCV獲取圖像中圓線上的數(shù)據(jù),需要的可以參考一下
    2021-11-11
  • C++寬字符與普通字符的轉(zhuǎn)換實例詳解

    C++寬字符與普通字符的轉(zhuǎn)換實例詳解

    這篇文章主要介紹了C++寬字符與普通字符的轉(zhuǎn)換實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言實現(xiàn)停車場管理系統(tǒng)

    C語言實現(xiàn)停車場管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C語言實現(xiàn)圖書館管理系統(tǒng)

    C語言實現(xiàn)圖書館管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖書館管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Qt實現(xiàn)繪制一個簡單多邊形的示例代碼

    Qt實現(xiàn)繪制一個簡單多邊形的示例代碼

    QT提供了圖形繪制接口QPainter,通過該接口可以繪制多種圖形,包括多邊形。本文就來利用它實現(xiàn)繪制一個簡單的多邊形,感興趣的可以嘗試一下
    2022-11-11

最新評論