C++ 满足给定条件的字符串的计数

C++ 满足给定条件的字符串的计数

介绍

C++中的字符串也是一种原始数据类型,由字母数字字符组成。字符串中的字母区分大小写,但可以包含大写和小写字母。

在本文中,我们给出了一个由小写字符串组成的输入数组,并要求满足以下条件的字符串对的计数:

  • 两个字符串应该有相同的第一个和最后一个元音字母。

  • 两个字符串具有相等数量的配对。

数组是一种模拟存储类似元素的数据结构。 C++数组必须满足以下属性:

  • 数组中的所有元素必须属于相同的数据类型。

  • 数组与固定长度相关联。

这里有一个示例来了解所问问题,

示例

示例1 – arr:{"bitch","glitch","bitter","ditch"}

输出 – 1

解释 – 满足条件的字符串对是“bitch”和“glitch”,它们具有元音字母{i}。这些字符串的第一个和最后一个元音字母也是’i’,它们是等效的。字符串“ditch”也满足条件,但已经包含在有效对中。

解决此问题的方法是字符检查,然后在C++中使用元组来存储元音字母的计数。

语法

make_tuple ( val1, val2, val3..)

The make_tuple()函数在C++中用于构造元组中指定类型的对象。它用于在map中给元组赋值。这些值按照它们的声明顺序赋值。

参数

val1, val2 , .. – 要赋值给map中的元组的值。

在评估此方法时使用了另一种方法:

push_back( val1)

push_back()是C++中用于向数据对象(如向量或映射)插入元素的内置方法。插入总是从末尾进行。每次插入,对象的大小增加一。该方法的执行时间复杂度为常数。

参数

val – 要插入到C++对象中的值。

步骤

  • 取一个样本字符串数组arr作为输入。

  • 维护一个映射map,用于存储满足所需条件的单词元组。

  • 使用for循环来对arr进行迭代,循环变量为i。

  • - 在每次迭代期间,存储一个字符向量vec,以跟踪从数组arr中提取的单词的元音。

  • 使用word变量引用数组的特定单词。

  • 对提取的数组word进行循环迭代,循环变量为j。每次从word中提取特定字符,并检查它是元音还是辅音。

  • 如果提取的字符是元音,则将其推入vec。

  • 如果vec非空,即存在元音,则从当前单词i中提取第一个和最后一个元音。

  • 使用提取的元音和第i个单词中的元音总数构建映射中的元组,然后将其映射到第i个索引。使用push_back()方法将创建的元组添加到映射的末尾。

  • 对映射进行迭代。

  • 计算可能使用映射中的元组对形成的数对的数量。

  • 将数对的数量作为输出返回,由变量count表示。

示例

下面的C++代码段说明了计数满足以下条件的字符串的过程:

//include the required libraries
#include <bits/stdc++.h>
using namespace std;

//count number of pairs satisfying the cond
int satisfycondn(string sarr[], int n){
   //declaring map to store tuples
    map<tuple<char, char, int>, vector<int> > map;

   // For every string of the array
    for (int i = 0; i < n; i++) {

      //storing vowels of the extracted word
      vector<char> vec;
      //extracting the word 
      string word = sarr[i];
      for (int j = 0; j < word.size(); j++) {
         char ch = sarr[i][j];
         //checking if the character is vowel
         if (ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
         vec.push_back(ch);
      }
      int numvowels =  vec.size();
      // If current string contains vowels
      if (numvowels > 0) {

      int frstvowel = vec[0];
      int scndvowel =  vec[numvowels - 1];

      map[make_tuple(frstvowel,  scndvowel, numvowels)]
        .push_back(i);
      }
   }
   //maintaining a count to store the pair of strings satisfying the cond 
   int count = 0;
   //iterating over the map 
   for (auto m : map) {

      vector<int> v = m.second;
      //getting the valid pair of size 
      int v_size = v.size();
      //incrementing the counter
       count += v_size / 2;
   }
   return count;
}

int main() {
   //declaring a sample array
   string arr[] = { "point", "coin","groin","foul","area", "mourn" };  
   int n =   sizeof(arr) / sizeof(string);
   cout << "Count of strings satisfying the condition : "<<satisfycondn(arr,n);

   return 0;
}

输出

Count of strings satisfying the condition − 2

解释-数组中有两对字符串满足条件-{point, coin}和{foul, mourn}

第一对字符串中的元音字母各有2个,分别是o和i。

第二对字符串中的元音字母各有2个,分别是o和u。

结论

C++中的映射是非常灵活的数据结构,用于以更友好的方式存储数据及其相关属性。它简化了根据指定条件访问数据的过程。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程