tolower, toupper 함수
위 두 함수를 이용해 대소문자 변환을 할 수 있습니다
위 두 함수를 c++ 에서 사용하는 방법을 알아 보겠습니다
http://www.cplusplus.com/reference/ 다음 사이트를 참고하여 정리하였습니다
tolower 함수
이 함수는 두 가지 라이브러리에 있는 것으로 보입니다(더 있는지는 모르겠..)
- cctype(c 언어는 ctype.h)
- 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 사이트도 자주 보게 될 것 같네요