안녕하세요 오늘은, C++의 대소문자 변환하는 함수 tolower, toupper 함수를 알아보겠습니다.
tolower, toupper함수는 인자로 1개의 아스키 코드 값을 전달 하면 해당 문자의 대소문자를 변환해 줍니다.
대문자 -> 소문자로 변환하는 tolower의 함수 원형은 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | int tolower ( int c ); int _tolower( int c ); int towlower( wint_t c ); int _tolower_l( int c, _locale_t locale ); int _towlower_l( wint_t c, _locale_t locale ); |
msdn에서는 tolower을 수행하기 위해서 __isascii 함수와 isupper 함수를 수행해야 개발자가 예상되는 결과를 제공한다고 합니다.
msdn을 참고하여 함수를 만들면 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> using namespace std; void main() { // 대문자 -> 소문자 char acToLower[260] ={ "~hELlo WorLd!" }; int iLen = strlen (acToLower); for ( int iLoop = 0 ; iLoop < iLen ; iLoop++ ) { int iIsAscii = __isascii(acToLower[iLoop]); // ASCII인지 판단(성공 시 0이 아닌 값) int iIsUpper = isupper (acToLower[iLoop]); // 대문자인지 판단(성공 시 0이 아닌값) if ( (0 != iIsAscii) && (0 != iIsUpper) ) { char c = acToLower[iLoop]; acToLower[iLoop] = tolower (c); // 성공 시 소문자 ASCII 값 반환 } } } |
acStr에서 ASCII이고 대문자인 “~hELlo WorLd!”만 변환 됩니다.(굵은 글자)
소문자 -> 대문자로 변환하는 toupper의 함수 원형은 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | int toupper ( int c ); int _toupper( int c ); int towupper( wint_t c ); int _toupper_l( int c , _locale_t locale ); int _towupper_l( wint_t c , _locale_t locale ); |
이 함수 또한 __isascii 함수와 islower 함수를 같이 수행해야 개발자가 예상되는 결과를 제공한다고 합니다.
toupper 예제 함수는 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | using namespace std; void main() { // 소문자 -> 대문자 char acToUpper[260] ={ "~hELlo WorLd!" }; iLen = strlen (acToUpper); for ( int iLoop = 0; iLoop < iLen; iLoop++ ) { int iIsAscii = __isascii(acToUpper[iLoop]); // ASCII인지 판단(성공 시 0이 아닌 값) int iIsLower = islower (acToUpper[iLoop]); // 소문자인지 판단(성공 시 0이 아닌값) if ( ( 0 != iIsAscii ) && ( 0 != iIsLower ) ) { char c = acToUpper[iLoop]; acToUpper[iLoop] = toupper (c); // 성공 시 대문자 ASCII 값 반환 } } } |
acStr에서 ASCII이고 소문자인 “~hELlo WorLd!”만 변환 됩니다.(굵은 글자)
전체 코드는 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <iostream> using namespace std; void main() { // 대문자 -> 소문자 char acToLower[260] ={ "~hELlo WorLd!" }; int iLen = strlen (acToLower); for ( int iLoop = 0 ; iLoop < iLen ; iLoop++ ) { int iIsAscii = __isascii(acToLower[iLoop]); // ASCII인지 판단(성공 시 0이 아닌 값) int iIsUpper = isupper (acToLower[iLoop]); // 대문자인지 판단(성공 시 0이 아닌값) if ( (0 != iIsAscii) && (0 != iIsUpper) ) { char c = acToLower[iLoop]; acToLower[iLoop] = tolower (c); // 성공 시 소문자 ASCII 값 반환 } } // 소문자 -> 대문자 char acToUpper[260] ={ "~hELlo WorLd!" }; iLen = strlen (acToUpper); for ( int iLoop = 0; iLoop < iLen; iLoop++ ) { int iIsAscii = __isascii(acToUpper[iLoop]); // ASCII인지 판단(성공 시 0이 아닌 값) int iIsLower = islower (acToUpper[iLoop]); // 소문자인지 판단(성공 시 0이 아닌값) if ( ( 0 != iIsAscii ) && ( 0 != iIsLower ) ) { char c = acToUpper[iLoop]; acToUpper[iLoop] = toupper (c); // 성공 시 대문자 ASCII 값 반환 } } } |