计算在C ++中给定字符串的所有子字符串中出现的元音数量

给定一个包含英文字母的字符串str。目的是找到在str的所有子串中出现的元音数量。如果字符串为“ abcde”,则子字符串为“ a”,“ b”,“ c”,“ d”,“ e”,“ ab”,“ bc”,“ cd”,“ de”,“ abc”, “ bcd”,“ cde”,“ abcd”,“ bcde”,“ abcde”。这些子字符串中的元音数量为10。(a和e)

例如

输入值

str = ”aloe”
输出结果
计算在给定字符串的所有子字符串中出现的元音数量:
14

说明

The substrings are:
“a”, “l”, “o”, “e”, “al”, “lo”, “oe”, “alo”, “loe”, “aloe”. Total vowels in these are: 14

输入值

str=”http”
输出结果
计算在给定字符串的所有子字符串中出现的元音数量:
0

说明

The substrings are:
“h”, “t”, “t”, “p”, “ht”, “tt”, “tp”, “htt”, “ttp”, “http”. Total vowels in these are: 0

以下程序中使用的方法如下-

在这种方法中,我们将创建一个向量vec,该向量存储vec [i]中所有子字符串中第i个字符的出现次数。

第0个字符出现在n个子字符串中,其中n是字符串str的长度。

第ith个字符出现在所有包含该字符的子字符串(n-i)+包含第ith个字符的子字符串数目以及前一个字符(arr [i-1])-仅由前一个字符形成的子字符串数目(i)。

  • 以字符串str作为输入。

  • 功能 substring_vowels_count(string str, int length) 以str的长度为单位,并返回在给定字符串的所有子字符串中出现的元音数量的计数。

  • 将初始计数设为0。

  • 取整数向量vec。

  • 使用从i−0到i <length的for循环遍历vec,并在str的所有子字符串中用第i个位置字符的出现次数填充它。

  • 如果i = 0,对于第0个字符,此计数为长度。使用push_back [length]设置vec [0] = length。

  • 对于使用push_back(temp_1 + temp_2)设置的所有其他字符,其中temp_1 = length-1和temp_2 = vec [i-1] -i。

  • 现在,再次使用for循环遍历str,并将每个str [i]作为元音(a,e,i,o或u)遍历。添加vec [i]进行计数。

  • 最后,我们将以总数为单位在子字符串中出现元音的总数。

  • 返回计数作为结果。

示例

#include <bits/stdc++.h>
using namespace std;
int substring_vowels_count(string str, int length){
   int count = 0;
   vector<int> vec;
   for (int i = 0; i < length; i++){
      if (i == 0){
         vec.push_back(length);
      } else {
         int temp_1 = length − i;
         int temp_2 = vec[i − 1] − i;
         vec.push_back(temp_1 + temp_2);
      }
   }
   for (int i = 0; i < length; i++){
      if(str[i] == 'a' || str[i] == 'i' || str[i] == 'e' || str[i] == 'o' || str[i] == 'u'){
         count = count + vec[i];
      }
   }
   return count;
}
int main(){
   string str = "honesty";
   int length = str.length();
   cout<<"计算在给定字符串的所有子字符串中出现的元音数量: "<<substring_vowels_count(str, length);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出-

计算在给定字符串的所有子字符串中出现的元音数量: 28

猜你喜欢