이상한 문자 만들기 : 문제 링크
문자열 s는 한 개 이상의 단어로 구성되어 있다. 각 단어는 하나 이상의 공백문자로 구분되어 있다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 return하는 함수, solution을 완성
제한 사항
- 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야한다.
- 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 한다.
문자열의 소문자 변환을 위해 transform() 함수를 사용할 것 이므로 algorithm 헤더를 포함
단어별로 짝/홀수 인덱스를 판단할 정수형 변수 check를 0으로 초기화. transform() 함수를 사용하고 tolower 옵션을 통해 문자열 s의 모든 문자를 소문자로 변환. for loop를 통해 문자열 s의 첫번째부터 마지막 문자까지 순환하고, if문을 통해 공백을 발견하면 check를 0으로 초기화하고 loop 반복. 또다른 if문을 통해 check의 짝/홀수를 판별하고 짝수라면 문자에 32를 빼고 저장(아스키 코드 상 대문자 변환)하고 check를 1씩 늘림. loop 탈출 후, 최종적으로 저장된 문자열 s를 return
algorithm 헤더의 transform() 함수 사용법
transform(first1, last1, d_first, unary_op);
- first1 : 입력한 변수의 first 위치
- last1 : 입력한 변수의 last 위치까지
- d_first : 저장할 변수의 first 위치
- unary_op : 변환할 방법이 있는 함수 (대문자로 : toupper, 소문자로 : tolower)
#include <string>
#include <algorithm>
using namespace std;
string solution(string s) {
int check = 0;
transform(s.begin(), s.end(), s.begin(), ::tolower);
for(int i = 0; i < s.size(); ++i) {
if(s[i] == ' ') {
check = 0;
continue;
}
if(check % 2 == 0) s[i] -= 32;
check++;
}
return s;
}