首页 > 后端开发 > C++ > 正文

在C/C++中交替使用元音和辅音字符串

PHPz
发布: 2023-08-27 08:45:28
转载
871 人浏览过

在C/C++中交替使用元音和辅音字符串

给定一个字符串,重新排列字符串中的字符,使得元音和辅音占据交替的位置。如果字符串不能按照上述方式重新排列,则打印“不可能”。

元音之间的顺序和辅音之间的顺序应该保持不变。

Input: abce
Output: abec
登录后复制

Explanation

  • 计算字符串中元音字母和辅音字母的数量。

  • 如果元音字母和辅音字母的数量之差超过1,则返回“不可能”。

  • 如果字符串中元音字母的数量多于辅音字母,则先打印第一个元音字母,然后对剩余的字符串进行递归。

  • 如果字符串中辅音字母的数量多于元音字母,则先打印第一个辅音字母,然后对剩余的字符串进行递归。

  • 如果元音字母和辅音字母的数量相同,则比较第一个元音字母和第一个辅音字母,并先打印较小的那个。

Example

#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中文网其他相关文章!

相关标签:
来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板