새소식

언어/C++

c++ tolower, toupper 함수 총 정리(대소문자 변환)

  • -

tolower, toupper 함수

위 두 함수를 이용해 대소문자 변환을 할 수 있습니다
위 두 함수를 c++ 에서 사용하는 방법을 알아 보겠습니다

http://www.cplusplus.com/reference/ 다음 사이트를 참고하여 정리하였습니다

tolower 함수

이 함수는 두 가지 라이브러리에 있는 것으로 보입니다(더 있는지는 모르겠..)

  1. cctype(c 언어는 ctype.h)
  2. locale

ctype의 tolower 함수

ctype의 lower 함수는 다음과 같이 생겼습니다

int tolower(int c);

이 함수는 소문자 c를 같은 대문자로 변환해줍니다.
만약 변환을 수행할 수 없는 경우에는 변경되지 않는 원래의 값을 반환합니다.
(단, 문자로 간주되는 것은 사용 중인 locale에 따라 달라질 수 있습니다)
기본 'C' locale 에서는 저희가 알고 있는 알파벳 그대로 변환 됩니다(A -> a, B -> b ... Z -> z)

예제 코드

#include <iostream>
#include <ctype>

int main() {
    string str = "HOHO Tistory";

    cout << "변경 전: " << str << endl;    // 변경 전: HOHO Tistory
    for(char& ch : str) {
        ch = tolower(ch);
    }
    cout << "변경 후: " << str << endl;    // 변경 후: hoho tistory

    return 0;
}

locale의 tolower

c++의 locale 라이브러리에도 tolower 함수가 있습니다(정확히는 function template)
이 함수는 위의 tolower 함수를 overload한 함수입니다.
형태는 다음과 같습니다

template <class charT>
  charT tolower (charT c, const locale& loc)

이는 ctype의 tolower와 같은 방식이지만 locale 변수가 2번째 파라미터로 들어갑니다
그래서 locale에 따라 대문자를 소문자로 변환해주게 됩니다

예제 코드

#include <iostream>
#include <string>
#include <locale>

using namespace std;

int main() {
    locale loc;
    string str = "HOHO Tistory";

    cout << "변경 전: " << str << endl;    // 변경 전: HOHO Tistory
    for (char& ch : str) {
        ch = tolower(ch, loc);    
    }
    cout << "변경 후: " << str << endl;    // 변경 후: hoho tistory

    return 0;
}

locale이 추가 된것 외에는 ctype의 tolower와 같습니다

toupper

toupper 함수를 통해 소문자를 대문자로 변환할 수 있습니다

ctype의 toupper

ctype의 toupper 함수는 다음과 같이 생겼습니다

int toupper(int c);

tolower와 같은 방식이며 소문자 -> 대문자만 다릅니다
예제는 생략

locale의 toupper

이도 locale의 tolower와 같은 형상입니다

template <class charT>
  charT toupper (charT c, const locale& loc)

위에서 설명한 locale의 tolower와 같은 방식이며 예제도 과감히 생략!!

대소문자 변환 문제를 풀다가 확실히 알기 위해서 이렇게 정리까지 해보았습니다
앞으로 javascript 공부시에 MDN을 봤던것 처럼 cpluscplus 사이트도 자주 보게 될 것 같네요

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.