用 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告