给定一个字符串,重新排列字符串中的字符,使得元音和辅音占据交替的位置。如果字符串不能按照上述方式重新排列,则打印“不可能”。
元音之间的顺序和辅音之间的顺序应该保持不变。
input: abceoutput: abec
explanation计算字符串中元音字母和辅音字母的数量。
如果元音字母和辅音字母的数量之差超过1,则返回“不可能”。
如果字符串中元音字母的数量多于辅音字母,则先打印第一个元音字母,然后对剩余的字符串进行递归。
如果字符串中辅音字母的数量多于元音字母,则先打印第一个辅音字母,然后对剩余的字符串进行递归。
如果元音字母和辅音字母的数量相同,则比较第一个元音字母和第一个辅音字母,并先打印较小的那个。
example#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++中交替使用元音和辅音字符串的详细内容。