[Programmers] Level2 : JadenCase 문자열 만들기
Question
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;
}