Computer >> Máy Tính >  >> Lập trình >> C ++

Chuỗi nguyên âm và phụ âm thay thế trong C ++

Trong trường hợp một chuỗi đã cho, hãy sắp xếp lại các ký tự của chuỗi đã cho để các nguyên âm và phụ âm chiếm vị trí thay thế. Nếu không thể sắp xếp lại chuỗi theo cách thích hợp, hãy hiển thị “không có chuỗi như vậy”. Thứ tự các nguyên âm đối với nhau và thứ tự của các phụ âm đối với nhau cần được giữ nguyên.

Nếu có thể tạo nhiều hơn một chuỗi cần thiết, hãy hiển thị từ vựng nhỏ hơn.

Ví dụ

Input : Tutorial
Output : Tutorila
Input : onse
Output : nose

Có hai kết quả có thể xảy ra là "mũi" và "kết quả". Vì "mũi" nhỏ hơn về mặt từ vựng nên chúng tôi hiển thị nó.

  • Số lượng nguyên âm và phụ âm trong chuỗi nhất định được tính.

  • Trong trường hợp này, nếu sự khác biệt giữa các số lượng nhiều hơn một, hãy trả về "Không thể xảy ra".

  • Trong trường hợp này, nếu có nhiều nguyên âm hơn phụ âm, hãy hiển thị nguyên âm đầu tiên và lặp lại cho chuỗi còn lại.

  • Trong trường hợp này, nếu có nhiều phụ âm hơn nguyên âm, hãy hiển thị phụ âm đầu tiên và lặp lại cho chuỗi còn lại.

  • Trong trường hợp này, nếu số đếm giống nhau, hãy so sánh nguyên âm đầu tiên với phụ âm đầu tiên và hiển thị nguyên âm nhỏ hơn trước.

Ví dụ

// C++ application of alternate vowel and consonant string
#include <bits/stdc++.h>
using namespace std;
// 'ch1' is treated as vowel or not
bool isVowel(char ch1){
   if (ch1 == 'a' || ch1 == 'e' || ch1 == 'i' ||
   ch1 == 'o' || ch1 =='u')
   return true;
   return false;
}
// build alternate vowel and consonant string
// str1[0...l2-1] and str2[start...l3-1]
string createAltStr(string str1, string str2,
int start1, int l1){
   string finalStr1 = "";
   // first adding character of vowel/consonant
   // then adding character of consonant/vowel
   for (int i=0, j=start1; j<l1; i++, j++)
   finalStr1 = (finalStr1 + str1.at(i)) + str2.at(j);
   return finalStr1;
}
// function to locate or find the needed alternate vowel and consonant string
string findAltStr(string str3){
   int nv1 = 0, nc1 = 0;
   string vstr1 = "", cstr1 = "";
   int l1 = str3.size();
   for (int i=0; i<l1; i++){
      char ch1 = str3.at(i);
      // count vowels and updaye vowel string
      if (isVowel(ch1)){
      nv1++;
      vstr1 = vstr1 + ch1;
   }
   // counting consonants and updating consonant string
   else{
         nc1++;
         cstr1 = cstr1 + ch1;
      }
   }
   // no such string can be built
   if (abs(nv1-nc1) >= 2)
   return "no such string";
   // delete first character of vowel string
   // then built alternate string with
   // cstr1[0...nc1-1] and vstr1[1...nv1-1]
   if (nv1 > nc1)
   return (vstr1.at(0) + createAltStr(cstr1, vstr1, 1, nv1));
   // delete first character of consonant string
   // then built alternate string with
   // vstr1[0...nv1-1] and cstr1[1...nc1-1]
   if (nc1 > nv1)
   return (cstr1.at(0) + createAltStr(vstr1, cstr1, 1, nc1));
   // if both vowel and consonant
   // strings are of equal length
   // start building string with consonant
   if (cstr1.at(0) < vstr1.at(0))
   return createAltStr(cstr1, vstr1, 0, nv1);
   // start building string with vowel
   return createAltStr(vstr1, cstr1, 0, nc1);
}
 // Driver program to test above
int main(){
   string str3 = "Tutorial";
   cout<< findAltStr(str3);
   return 0;
}

Đầu ra

Tutorila

Độ phức tạp thời gian &trừ O (n), trong đó ‘n’ được coi là độ dài của chuỗi