C++
 Computer >> コンピューター >  >> プログラミング >> C++

【C++】文字列から最初のX個の母音を抽出して出力する方法

問題概要

この問題では、サイズNの文字列str[]と整数Xが与えられます。求められているのは、文字列から最初のX個の母音を出力するプログラムを作成することです。

文字列から見つかった最初のX個の母音を出力し、母音がX個未満しか存在しない場合は-1を出力します。

具体例を使って問題を理解しましょう。

入力: str = "learn C programming language", X = 5
出力: e, a, o, a, i
母音とは a, e, i, o, u のことです

解決アプローチ

この問題に対するシンプルな解決策は、文字列を1文字ずつ先頭から走査する方法です。走査の過程で見つけたすべての母音を、結果保存用の文字列(vowelsString)に追加していきます。そして、その文字列の長さがXに達した時点で、それを結果として返します。文字列全体を走査しても母音がX個集まらない場合は、-1を返します。

実装例

以下は、このソリューションの動作を示すC++プログラムです。

#include <iostream>
#include <string.h>
using namespace std;
bool isaVowel(char c){
   c = tolower(c);
   if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
      return true;
   return false;
}
string findXVowelsString(string s, int x){
   string vowelsString = "";
   for (int i = 0; i < s.length(); i++) {
      if (isaVowel(s[i]))
         vowelsString += s[i];
      if (vowelsString.length() == x) {
         return vowelsString;
      }
   }
   return "-1";
}
int main(){
   string str = "learn C programming language";
   int x = 5;
   cout<<"The first "<<x<<" vowels from the string are "<<findXVowelsString(str, x);
   return 0;
}

出力

The first 5 vowels from the string are eaoai

コードの解説

isaVowel関数は、引数として受け取った文字をtolowerで小文字に変換した上で、a・e・i・o・uのいずれかに一致するかどうかを判定します。これにより、大文字・小文字を問わず母音を正しく検出できます。

findXVowelsString関数は、文字列を先頭から順に調べ、母音を見つけるたびに結果用の文字列へ追加していきます。母音の数がちょうどX個に達した時点で即座にその文字列を返し、最後まで走査してもX個集まらない場合は「-1」を返します。

このアルゴリズムの時間計算量はO(N)、空間計算量はO(X)です(Nは入力文字列の長さ)。文字列を一度だけ走査すればよいため、非常に効率的なアプローチと言えます。

  1. C++で文字列内の母音を反転する方法|双方向ポインタ法によるO(n)実装

    文字列が与えられたとき、その中に含まれるすべての母音を反転させることが今回の課題です。まずは具体例から見ていきましょう。 入力例1 − a = tutor 出力 − totur 解説 − 文字列「tutor」の母音(u と o)を反転すると、「totur」という出力が得られます。 入力例2 − a = mathematics 出力 − mithametacs 解説 − 文字列「mathematics」の母音を反転すると、「mithametacs」という出力が得られます。 この問題を解くためのアプローチ 文字列が与えられたら、その中に含まれるすべての母音を反転させる必要があります。この問題には

  2. C++で文字列から二分木を構築する方法

    括弧と整数から構成される文字列が与えられたとき、その文字列から二分木を構築する問題を考えてみましょう。入力文字列全体が一つの二分木を表しており、整数の後に0個、1個、または2組の括弧が続く形式になっています。整数はルート(根)ノードの値を表し、各括弧のペアは同じ構造を持つ子の部分木を含んでいます。問題の例例えば、入力が 4(2(3)(1))(6(5)) のような文字列だった場合、出力は [3,2,1,4,5,6](中順走査・inorder traversal の結果)となります。解決アプローチこの問題を解くために、以下の手順に従います。再帰関数 solve() を定義します。引数として文字列