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

C++で文字列内の母音ペアを数える方法を解説

はじめに

文字列が与えられ、その中に「隣り合う2文字がどちらも母音であるペア」がいくつ含まれるかを数えるのが今回の課題です。英語のアルファベットには a、i、e、o、u の5つの母音があり、それ以外の文字は子音と呼ばれます。

入力例と出力例

入力: string str = "tutorials point"
出力: 与えられた文字列内の母音ペアの数:2

説明: 与えられた文字列から作れる隣接ペアは (t, u)、(u, t)、(t, o)、(o, r)、(r, i)、(i, a)、(a, l)、(l, s)、(s, p)、(p, o)、(o, i)、(i, n)、(n, t) です。このうち、両方の要素が母音となっているのは (i, a) と (o, i) の2つであるため、母音ペアの数は2となります。

入力: string str = "learning"
出力: 与えられた文字列内の母音ペアの数:1

説明: 与えられた文字列から作れる隣接ペアは (l, e)、(e, a)、(a, r)、(r, n)、(n, i)、(i, n)、(n, g) です。このうち、両方の要素が母音となっているのは (e, a) のみであるため、母音ペアの数は1となります。

プログラムで使用するアプローチ

  • 文字列型(string)の変数に文字列を入力します。
  • length() 関数を使用して、文字列に含まれる全文字数(長さ)を取得します。
  • 母音ペアの個数を格納するための一時変数 count を用意します。
  • i を 0 から文字列の長さまで順に進める for ループを開始します。
  • ループ内で、まず str[i] が 'a'、'i'、'e'、'o'、'u' のいずれかであるかを判定します。さらに str[i+1] も同じく母音のいずれかである場合は、count を 1 増やします。
  • 最後に count を返し、結果を出力します。

C++での実装例

#include <bits/stdc++.h>
using namespace std;
int count_pairs(string str, int length){
    int count = 0;
    for(int i=0 ;i<length-1; i++){
        if(str[i]=='a' || str[i]=='i'||str[i]=='e'||str[i]=='o'||str[i]=='u'){
            if(str[i+1]=='a'||str[i+1]=='i'||str[i+1]=='e'||str[i+1]=='o'||str[i+1]=='u'){
                count++;
            }
        }
    }
    return count;
}
int main(){
    string str = "tutorials point";
    int length = str.length();
    cout<<"Count the pairs of vowels in the given string are: "<<count_pairs(str, length);
    return 0;
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

Count the pairs of vowels in the given string are: 2

補足:計算量と応用ポイント

このアルゴリズムは文字列を先頭から一度だけ走査するため、時間計算量は O(n)(n は文字列の長さ)であり、空間計算量は O(1) と非常に効率的です。

また、大文字の母音(A、I、E、O、U)も対象にしたい場合は、判定前に tolower() 関数で各文字を小文字に変換しておくと、条件分岐をシンプルに保ったまま対応できます。

  1. 【C++】文字列内の「1(0+)1」パターンをすべて検出する方法

    文字列の中に「1(0+)1」という形式のパターンが含まれていると仮定します。ここで「(0+)」は、1個以上の「0」が連続して現れることを意味します。この記事では、文字列からこのパターンをすべて検出する方法を解説します。パターン同士が重なり合う場合もカウントの対象とします。なお、対象の文字列はバイナリ文字列であるとは限らず、数字と小文字の英字のみで構成された文字列を扱います。例として、文字列が「1101001」の場合を考えてみましょう。この場合、「101」と「1001」の2つのパターンが見つかります。解決のためのアプローチこの問題は、以下の手順に従って解くことができます。文字列内のすべての文字c

  2. C++プログラムでポインタを使用して文字列内の母音をカウントする方法

    ポインタを使って文字列内の母音の数を求めるには、文字列・母音・そしてポインタと文字列を組み合わせて使う方法について理解しておく必要があります。文字列とは文字の配列です。母音とは集合 {a, e, i, o, u} に含まれる文字のことです。ポインタとは、変数が格納されているメモリ上の場所(アドレス)を保持する変数のことです。基本的な考え方文字列内の母音の数を求める手順は以下の通りです。文字列を先頭から順に走査(トラバース)します。各文字を母音(a, e, i, o, u)と比較します。一致した場合はカウンタを1増やし、一致しなければそのまま次へ進みます。なお、後述のコードではすべて小文字の文字