게임 개발 로그

1일차 / 알파벳 대소문자 변환 / C++ / 기초 본문

코테

1일차 / 알파벳 대소문자 변환 / C++ / 기초

03:00am 2023. 10. 31. 15:12

 

# 대소문자 바꿔서 출력하기


문제 설명

  • 영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로 소문자는 대문자로 변환해서 출력하는 코드를 작성해 보세요.

제한사항

  • 1 ≤ str의 길이 ≤ 20
  • str은 알파벳으로 이루어진 문자열입니다.

 

입출력 예
입력 #1

aBcDeFg

출력 #1

AbCdEfG

 

 


 

나의 코드 

#include <iostream>
#include <string>

using namespace std;

int main(void) {
    string str;
    cin >> str;
    for ( int i = 0; i < str.length() ; i++) {
        if (isupper(str[i])) str[i] = tolower(str[i]);
        else str[i] = toupper(str[i]);
    }
    
    cout << str;
    return 0;
}

 

 


 

 

 

다른 사람의 코드 

#include <iostream>
#include <string>

using namespace std;

int main(void)
{
    string str;
    cin >> str;
    for (auto c : str)
    {
        if ('a' <= c && c <= 'z')
            c -= 'a' - 'A';
        else
            c += 'a' - 'A';
        cout << c;
    }
    return 0;
}

 

'a' <= c && c <= 'z' ? c -= 'a' - 'A' : c += 'a' - 'A';

 

#include <iostream>
#include <string>

using namespace std;

int main(void) {
    string str;
    cin >> str;
    for (char c: str) cout << (c <= 'Z' ? char(c + 32) : char(c - 32));
    return 0;
}
  • 삼항연산자를 사용하여 간단하게 쓴 것

 


 

 

참고하여 다시 짠 코드 

#include <iostream>
#include <string>

using namespace std;

int main(void) {
    string str;
    cin >> str;
    
    for ( char c : str ) {
        ('a' <= c && c <= 'z') ? c -= 'a' - 'A' : c += 'a' - 'A';
        cout << c;
    }
    return 0;
}
  • 삼항연산자와 범위 기반 for문(Ranged-based for loops)를 사용하여 간소화시킨 코드
  • for문 다음 한 줄로 쓰는 것에는 실패했다
  • 'a'와 'A'의 차이를 알고 활용할 수 있다는 것에 의의 ( 'z' 기준 32 차이)
  • 오히려 가독성을 해치는 악영향 우려