C ++で文字列内の子音をカウントする(反復メソッドと再帰メソッド)
たとえば、任意の長さの文字列が与えられます。タスクは、反復法と再帰法の両方を使用して、与えられた文字列の子音の数を計算することです。
子音とは、母音ではないアルファベットのことです。つまり、a、i、e、o、uを除くアルファベットは子音と見なされます。したがって、以下のプログラムでは、これら以外のアルファベットの数を文字列で見つける必要があります。
再帰と反復は両方とも、一連の命令を繰り返し実行します。再帰とは、関数内のステートメントがそれ自体を繰り返し呼び出す場合です。反復とは、制御条件がfalseになるまでループが繰り返し実行されることです。再帰と反復の主な違いは、再帰はプロセスであり、常に関数に適用され、反復は繰り返し実行する一連の命令に適用されることです。
例
Input − string str = “tutorials point” Output − count is 8
説明 −指定された文字列strには、合計8つの子音があり、それらはt、t、r、l、s、p、n、およびtです。
Input − string str = “a e io u” Output − count is 0
説明 −指定された文字列strには子音がなく、代わりに母音しかないため、カウントは0です。
反復
以下のプログラムで使用されているアプローチは次のとおりです
-
文字列を変数に入力します。たとえば、str
-
文字列の文字数に応じて整数値を返すlength()関数を使用して、指定された文字列の長さを計算します
-
要素の数を格納する一時変数を取ります。
-
iが文字列の長さより短くなるまでiから0までのループを開始します
-
ループ内で、str [i]が子音であるかどうかを確認してから、countの値を1ずつインクリメントします
-
カウントを返す
-
結果を印刷します。
例
// Iterative CPP program
#include <iostream>
using namespace std;
// Function to check for consonant
bool consonant(char ch){
// To handle lower case
ch = toupper(ch);
return !(ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') && ch >= 65 && ch <= 90;
}
//function to count consonant
int countconsonants(string s){
int result = 0;
for (int i = 0; i < s.length(); i++){
// To check is character is Consonant
if (consonant(s[i])){
++result;
}
}
return result;
}
// main function
int main(){
string s = "wx abc def";
cout <<"count is: "<<countconsonants(s);
return 0;
} 出力
上記のコードを実行すると、次の出力が得られます
count is: 6
再帰的
以下のプログラムで使用されているアプローチは次のとおりです
-
文字列を変数に入力します。たとえば、str
-
文字列の文字数に応じて整数値を返すlength()関数を使用して、指定された文字列の長さを計算します
-
要素の数を格納する一時変数を取ります。
-
文字列内の子音を計算するために自分自身を呼び出す再帰関数を作成します
-
IFサイズが1であることを確認してから、str[0]を返します。
-
次に、recursive_call_to_functionを(str、size-1)として返し、文字が文字列であるかどうかを確認します(str [size-1])
例
// Recursive CPP program
#include <iostream>
using namespace std;
// Function to check for consonant
bool consonant(char ch){
// To convert the lower case
ch = toupper(ch);
return !(ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U') && ch >= 65 && ch <= 90;
}
// to count total number of consonants
int consonantcount(string str, int n){
if (n == 1){
return consonant(str[0]);
}
return consonantcount(str, n - 1) +
consonant(str[n-1]);
}
int main(){
string str = "wx abc def";
cout <<"count is: "<<consonantcount(str, str.length());
return 0;
} 出力
上記のコードを実行すると、次の出力が得られます-
count is: 6
-
C ++のバイナリツリー(反復および再帰)の完全なノードをカウントします
バイナリツリーが与えられ、タスクは、反復的かつ再帰的なアプローチを使用して、バイナリツリーで使用可能な完全なノードの数を計算することです。フルノードとは、両方の子があり、子がnullでないノードです。フルノードでは、正確に2つの子を持つノードを考慮することに注意してください。 バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。バイナリツリーには、検索が並べ替えられた配列と同じくらい高速であり、挿入または削除操作がリンクリストと同じくらい高速であるため、順序付き配列とリンクリストの両方の利点
-
C ++のバイナリツリー(反復および再帰)のハーフノードをカウントします
バイナリツリーが与えられ、タスクは、反復的かつ再帰的なアプローチを使用して、バイナリツリーで使用可能なハーフノードの数を計算することです。ハーフノードは、子が1つだけで、もう1つの子がnullであるノードです。ハーフノードでは、リーフノードを考慮しないことに注意してください。 バイナリツリーは、データストレージの目的で使用される特別なデータ構造です。二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。バイナリツリーには、検索が並べ替えられた配列と同じくらい高速であり、挿入または削除操作がリンクリストと同じくらい高速であるため、順序付き配列とリンクリストの両方の利点