用 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
广告