>  기사  >  백엔드 개발  >  C/C++에서 모음과 자음 문자열을 교대로 사용하기

C/C++에서 모음과 자음 문자열을 교대로 사용하기

PHPz
PHPz앞으로
2023-08-27 08:45:28861검색

C/C++에서 모음과 자음 문자열을 교대로 사용하기

문자열이 주어지면 모음과 자음이 교대로 위치하도록 문자열의 문자를 재배열하세요. 위에서 설명한 대로 문자열을 재배열할 수 없으면 "impossible"을 인쇄합니다.

모음 사이의 순서와 자음 사이의 순서는 동일하게 유지되어야 합니다.

Input: abce
Output: abec

Explanation

  • 문자열에서 모음과 자음의 개수를 셉니다.

  • 모음과 자음의 개수 차이가 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제