
给定一个字符串,重新排列字符串中的字符,使得元音和辅音占据交替的位置。如果字符串不能按照上述方式重新排列,则打印“不可能”。
元音之间的顺序和辅音之间的顺序应该保持不变。
Input: abce Output: abec
计算字符串中元音字母和辅音字母的数量。
如果元音字母和辅音字母的数量之差超过1,则返回“不可能”。
立即学习“C++免费学习笔记(深入)”;
如果字符串中元音字母的数量多于辅音字母,则先打印第一个元音字母,然后对剩余的字符串进行递归。
如果字符串中辅音字母的数量多于元音字母,则先打印第一个辅音字母,然后对剩余的字符串进行递归。
如果元音字母和辅音字母的数量相同,则比较第一个元音字母和第一个辅音字母,并先打印较小的那个。
#include <iostream>
using namespace std;
bool isVowel(char ch) {
if (ch == 'a' || ch == 'e' || ch == 'i' ||
ch == 'o' || ch =='u')
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中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号