Heim  >  Artikel  >  Backend-Entwicklung  >  Abwechselnde Vokal- und Konsonantenzeichenfolgen in C/C++

Abwechselnde Vokal- und Konsonantenzeichenfolgen in C/C++

PHPz
PHPznach vorne
2023-08-27 08:45:28818Durchsuche

Abwechselnde Vokal- und Konsonantenzeichenfolgen in C/C++

Anhand einer Zeichenfolge ordnen Sie die Zeichen in der Zeichenfolge neu an, sodass Vokale und Konsonanten abwechselnde Positionen einnehmen. Wenn die Zeichenfolge nicht wie oben beschrieben neu angeordnet werden kann, geben Sie „unmöglich“ aus.

Die Reihenfolge zwischen Vokalen und die Reihenfolge zwischen Konsonanten sollte gleich bleiben.

Input: abce
Output: abec

Erklärung

  • Zählen Sie die Anzahl der Vokale und Konsonanten in einer Zeichenfolge.

  • Wenn der Unterschied in der Anzahl der Vokale und Konsonanten 1 überschreitet, geben Sie „unmöglich“ zurück.

  • Wenn die Zeichenfolge mehr Vokale als Konsonanten enthält, geben Sie zuerst den ersten Vokal aus und führen Sie dann eine Rekursion für die verbleibenden Zeichenfolgen durch.

  • Wenn die Zeichenfolge mehr Konsonanten als Vokale enthält, geben Sie zuerst den ersten Konsonanten aus und führen Sie dann eine Rekursion für die verbleibenden Zeichenfolgen durch.

  • Wenn die Anzahl der Vokale und Konsonanten gleich ist, vergleichen Sie den ersten Vokal und den ersten Konsonanten und drucken Sie zuerst den kleineren aus.

Beispiel

#include <iostream>
using namespace std;
bool isVowel(char ch) {
   if (ch == &#39;a&#39; || ch == &#39;e&#39; || ch == &#39;i&#39; ||
      ch == &#39;o&#39; || ch ==&#39;u&#39;)
   return true;
   return false;
}
string createAltStr(string str1, string str2,
int start, int l) {
   string finalStr = "";
   for (int i=0, j=start; j<l; i++, j++)
      finalStr = (finalStr + str1.at(i)) + str2.at(j);
   return finalStr;
}
string findAltStr(string str) {
   int nv = 0, nc = 0;
   string vstr = "", cstr = "";
   int l = str.size();
   for (int i=0; i<l; i++) {
      char ch = str.at(i);
      if (isVowel(ch)) {
         nv++;
         vstr = vstr + ch;
      } else {
         nc++;
         cstr = cstr + ch;
      }
   }
   if (abs(nv-nc) >= 2)
      return "no such string";
   if (nv > nc)
      return (vstr.at(0) + createAltStr(cstr, vstr, 1, nv));
   if (nc > nv)
      return (cstr.at(0) + createAltStr(vstr, cstr, 1, nc));
   if (cstr.at(0) < vstr.at(0))
      return createAltStr(cstr, vstr, 0, nv);
   return createAltStr(vstr, cstr, 0, nc);
}
int main() {
   string str = "abde";
   cout << findAltStr(str);
   return 0;
}

Das obige ist der detaillierte Inhalt vonAbwechselnde Vokal- und Konsonantenzeichenfolgen in C/C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen