1 분 소요

Question

Q


Solution

  • string s를 for 루프로 공백, 숫자, 알파벳에 대한 로직을 구분한다.
  • 항상 첫 글자 또는 공백 바로 다음의 첫 글자가 알파벳이라면 toupper()로 대문자로 변환 해준다.
  • 첫 글자가 아닌데 대문자라면 tolower()로 소문자로 변환한다.

  • 추가: toupper(), tolower()에 맞지 않는 타입(정수형)과 같은것이 들어오면 들어온 값 그대로 반환하기 때문에 이 처럼 따로 로직을 구성하지 않아도 되어 코드를 더 줄일 수 있을 것이다.

Cord

#include <string>
#include <vector>

using namespace std;

string solution(string s) 
{
    string answer = "";
    bool flag = true; // 공백 이후 첫 알파벳
    
    for (auto it = s.begin(); it != s.end(); it++)
    {
        if (*it == ' ') // 공백 일때
        {
            answer += *it;
            flag = true;
        }
        else if (!isalpha(*it)) // 알파벳이 아닐때 (공백이 제외된 숫자인 경우)
        {
            answer += *it;
            flag = false;
        }
        else // 알파벳 일때
        {
            if(flag && islower(*it))  // 첫 알파벳이고 소문자이면 대문자로 변환하여 넣기
            { 
                answer += toupper(*it); 
                flag = false;
            }
            else if (flag && isupper(*it)) // 첫 알파벳이고 대문자
            { 
                answer += *it;
                flag = false;
            }
            else if (!flag && isupper(*it))   // 첫 알파벳이 아니고 대문자
            {
                answer += tolower(*it);
            }
            else // 첫 알파벳이 아니고 소문자
            {
                answer += *it;
            }
        }
    }
    
    return answer;
}

Result

Result