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

C /C++での交互の母音と子音


母音と子音を含む入力文字列が与えられます。母音と子音が最終的な弦の交互の位置を占めるように弦を再配置します。母音と子音を交互の位置に配置しているため、入力文字列は次のいずれかの条件を満たす必要があります-

  • 母音と子音の数は同じでなければなりません。文字列「individual」には、5つの母音と5つの子音があります。

  • 母音の数が多い場合は、母音の数と子音の数の差は1でなければなりません。文字列「noe」には、2つの母音と1つの子音があります。

  • 子音の数が多い場合は、子音の数と母音の数の差は1でなければなりません。文字列「objective」には、4つの母音と5つの子音があります。

アルゴリズム

1. count number of vowels
2. Count number of consonants
3. if difference between number of vowels and consonants or viceversa is greater than 1 then return error
4. Split input string into two parts:
   a) First string contains only vowels
   b) Second string contains only consonants
5. If number of consonants and vowels are equal, then create final string by picking a character from each string alternatively.
6. If number of vowels are greater than consonants, then:
   a) Include additional vowel in final string to make both strings of equal length
   b) Create final string by appending a character from each string alternatively
7. If number of consonants are greater than vowels, then
   a) Include additional consonant in final string to make both strings of equal length
   b) Create final string by appending a character from each string alternatively

#include <iostream>
#include <string>
using namespace std;
bool is_vowel(char ch) {
   if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch =='u') {
      return true;
   }
   return false;
}
string create_final_string(string &s1, string &s2, int start, int end) {
   string final_string;
   for (int i = 0, j = start; j < end; ++i, ++j) {
      final_string = (final_string + s1.at(i)) + s2.at(j);
   }
   return final_string;
}
string create_alternate_string(string &s) {
   int vowel_cnt, consonant_cnt;
   string vowel_str, consonant_str;
   vowel_cnt = consonant_cnt = 0;
   for (char c : s) {
      if (is_vowel(c)) {
         ++vowel_cnt;
         vowel_str += c;
      } else {
         ++consonant_cnt;
         consonant_str += c;
      }
   }
   if (abs(consonant_cnt - vowel_cnt) >= 2) {
      cerr << "String cannot be formed with alternating vowels and cosonants\n";
      exit(1);
   }
   if ((consonant_cnt - vowel_cnt) == 0) {
      return create_final_string(vowel_str, consonant_str, 0, vowel_cnt);
   } else if (vowel_cnt > consonant_cnt) {
      return vowel_str.at(0) + create_final_string(consonant_str,vowel_str, 1, vowel_cnt);
   }
   return consonant_str.at(0) + create_final_string(vowel_str,consonant_str, 1, consonant_cnt);
}
int main() {
   string s1 = "individual";
   string s2 = "noe";
   string s3 = "objective";
   cout << "Input : " << s1 << "\n";
   cout << "Output: " << create_alternate_string(s1) << "\n\n";
   cout << "Input : " << s2 << "\n";
   cout << "Output: " << create_alternate_string(s2) << "\n\n";
   cout << "Input : " << s3 << "\n";
   cout << "Output: " << create_alternate_string(s3) << "\n\n";
}

出力

上記のコードをコンパイルして実行すると、次の出力が生成されます-

Input : individual
Output: inidivudal
Input : noe
Output: one
Input : objective
Output: bojecitev

  1. C ++のリンクリストに子音と母音のノードを配置しますか?

    この手法では、母音をキーとして持つノードを最初に転送し、子音を最後に転送します。この場合、順序も維持します。例を以下に示します- Input: A-M-A-Z-O-N Output: A-A-O-M-Z-N Code (Complexity: O(N), Space O(1)) 例 #include<iostream> using namespace std; class Node1{    public:    char var1;    Node1 *next1;    Node1(char v,N

  2. 文字列内の母音と子音の数をカウントするC#プログラム

    母音と子音の両方をチェックする必要がありますが、大文字と小文字の両方をチェックすることを忘れないでください。 母音を数えるには、「aeiou」の文字を個別に確認します。つまり if (myStr[i] == 'a' || myStr[i] == 'e' || myStr[i] == 'i' || myStr[i] == 'o' || myStr[i] == 'u' || myStr[i] == 'A' || myStr[i] == 'E' || myStr[i] == 'I&