프로그래머스 : JadenCase 문자열 만들기 (C++)
문제
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string>
#include <vector>
#include <cctype>
using namespace std;
string solution(string s) {
string answer = "";
if (isalpha(s[0])) s[0] = toupper(s[0]);
for (int i = 1; i < s.size(); i++){
if (s[i-1] == ' ' && s[i] != ' ') s[i] = toupper(s[i]);
else s[i] = tolower(s[i]);
}
answer = s;
return answer;
}
접근 및 풀이
문자열을 다루는 문제이다. 처음에는 공백 기준으로 문자열을 토큰화하는 방법을 썼는데, 공백이 두 번 연속으로 들어갔을 경우 처리가 힘들었고, 굳이 토큰화 해서 다시 벡터에 넣어줄 이유도 없었기 때문에 string 배열에서 문자를 하나하나 확인하는 방법을 썼다.
일단 가장 첫 문자인 0번째 문자는 무조건 단어의 첫 문자이기에 알파벳일 경우 (isalpha()
로 알파벳 여부 확인) 대문자로 바꾸도록 해주었다. 여기에서 대소문자는 ccytpe
헤더의 toupper()
(소문자 → 대문자) 함수와 tolower()
(대문자 → 소문자) 함수를 사용해 변환한다.
그리고 나서 그 다음부터 반복문을 돌면서 앞글자가 공백이고 해당 문자가 공백이 아닐 경우, 즉 해당 문자가 단어의 첫 문자일 경우에는 대문자로 바꾸고 나머지 문자들은 소문자로 바꾸어 준다.
문제 자체는 어려운 문제가 아니지만 공백이 연속해서 나올 수 있다는 조건을 생각해 주지 않으면 틀릴 수 있는 것 같다.
댓글남기기