用 C++ 統計以給定模式結尾的字串


給定一個字串陣列 str[] 和一個模式字串 pat。目標是找到 str[] 中以模式 pat 結尾的字串元素。

我們將遍歷 str 的每個字串,並將最後一個字元與 pat 進行比較。如果匹配,則遞增

讓我們透過示例來理解。

輸入 

str[]={ “kittens”, “hens”, “deers”, “dogs” } pat=”ens”

輸出 

Strings that end with given pattern: 2

解釋 

Strings “kitt-ens” and “h-ens” end with “ens”.

輸入 

str[]={ “tickets”, “wickets”, “bats”, “cricket” } pat=”et”

輸出 

Strings that end with given pattern: 1

解釋 

Strings “wick-et” ends with “et”.

下面程式中使用的方案如下

  • 我們有字串陣列 str[] 和一個模式字串 pat。

  • N 是 str[] 中字串的數量。

  • 函式 endPattern(string str[], int n, string ptr) 返回 str 中以給定模式結尾的字串的數量

  • 將初始變數 count 設定為 0。

  • 使用 for 迴圈從 i=1 遍歷到 i<n

  • 將每個字串 str[i] 作為 s。令 slen 為 s.length()。

  • 取 plen=ptr.lenght()。取 flag=1。

  • 現在將 plen 和 slen 分別減 1 以獲取字串 s 和模式 ptr 的最後一個索引。

  • 使用 while 迴圈檢查直到 plen>=0。

  • 如果任何 s[slen]!=ptr[plen]。將 flag 設定為 0 並中斷迴圈。否則,遞減 plen 和 slen 以檢查從末尾開始的下一個字元。

  • 在 while 迴圈結束後,如果 flag 仍然為 1,則遞增 count,因為 ptr 出現在 s 中。

  • 在所有迴圈結束後返回 count,即以給定模式結尾的字串的數量。

示例

 即時演示

#include <bits/stdc++.h>
using namespace std;
int endPattern(string str[], int n, string ptr){
   int count=0;
   for(int i=0;i<n;i++){
      string s=str[i];
      int slen=s.length();
      int plen=ptr.length();
      int flag=1;
      slen--; //last index
      plen--;
      while(plen>=0){
         if(ptr[plen]!=s[slen]){
            flag=0;
            break;
         }
         plen--;
         slen--;
      }
      if(flag==1)
         { count++; }
   }
   return count;
}
int main(){
   string patrn = "pes";
   int N = 4;
   string str[] = { "stripes", "cars", "ripes", "pipes" };
   cout <<"Strings that end with given pattern: "<<endPattern(str,N,patrn);
   return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Strings that end with given pattern: 3

更新於: 2020-10-31

129 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.