ホームページ > バックエンド開発 > C++ > C/C++ での母音文字列と子音文字列の交互配置

C/C++ での母音文字列と子音文字列の交互配置

PHPz
リリース: 2023-08-27 08:45:28
転載
896 人が閲覧しました

C/C++ での母音文字列と子音文字列の交互配置

指定された文字列で、母音と子音が交互の位置を占めるように文字列内の文字を再配置します。上記のように文字列を並べ替えることができない場合は、「不可能」と出力します。

母音間の順序と子音間の順序は同じでなければなりません。

Input: abce
Output: abec
ログイン後にコピー

説明

  • 文字列内の母音と子音の数を数えます。

  • 母音と子音の数の差が 1 を超える場合は、「不可能」を返します。

  • 文字列内に子音より母音が多い場合は、最初の母音を最初に出力してから、残りの文字列を再帰的に実行します。

  • 文字列内に母音よりも子音が多い場合は、最初の子音を最初に出力してから、残りの文字列を再帰的に実行します。

  • 母音と子音の数が同じ場合は、最初の母音と最初の子音を比較し、小さい方を先に出力します。

#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;
}
ログイン後にコピー

以上がC/C++ での母音文字列と子音文字列の交互配置の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート