ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++_upper_lower
    Programming/_C++ 2023. 6. 16. 14:48

    코딩 테스트 문제를 준비하다보면 소문자를 대문자로, 대문자를 소문자로 바꾸는 문제가 간혹 보인다.

    이를 C++에서 해결하는 몇가지 방법을 보자.

     

    1. toupper(), tolower(), isupper(), islower()

    toupper()는 문자열을 대문자로 변경하는 함수이다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        string my_string = "Test";
        string answer = "";
        
        for (char ele : my_string)
        {
            answer += toupper(ele);
        }
    
        cout << answer; //result: TEST
    }

     

     

    tolower()는 문자를 소문자로 변경하는 함수이다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        string my_string = "Test";
        string answer = "";
        
        for (char ele : my_string)
        {
            answer += tolower(ele);
        }
    
        cout << answer; //result: test
    }

     

    isupper()와 islower()는 각각 대문자, 소문자가 있는지 검사를 하는 함수이다.

    isupper()는 0, 1을 반환하며 0은 False, 1은 True를 의미한다.

    이는 islower()도 마찬가지이다.

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        string my_string1 = "Test";
            
        for (char ele : my_string1)
        {
            if (isupper(ele))
                cout << ele << " " << "upper: "<< " " << isupper(ele) << " " << "lower: " << " " << islower(ele) << "\n";
            else if (islower(ele))
                cout << ele << " " << "upper: "<< " " << isupper(ele) << " " << "lower: " << " " << islower(ele) << "\n";
        }
    }

     

    2. ASCII (American Standard Code for Information Interchange

    ASCII: https://ko.wikipedia.org/wiki/ASCII

     

    ASCII - 위키백과, 우리 모두의 백과사전

    위키백과, 우리 모두의 백과사전. 1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문

    ko.wikipedia.org

    ASCII는 미국정보교환표준부호로 이를 사용하면 대소문자를 바꿀 수 있다.

    대문자 A~Z는 십진수로 65 ~ 90, 소문자 a ~ z는 십진수로 97 ~ 122이다.

     

    C++에서는 char()를 사용하여 ASCII를 사용할 수 있다.

     

    - upper

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        string my_string1 = "Test";
        string answer = "";
            
        for (char ele : my_string1)
        {
            int ascii_num = static_cast<int>(ele);
    
            if (ascii_num >= 97)
            {
                ascii_num -= 32;
                answer += static_cast<char>(ascii_num);
            }
            else
            {
                answer += static_cast<char>(ascii_num);
            }
        }
        cout << answer;
    }

     

    - lower

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
        string my_string1 = "Test";
        string answer = "";
            
        for (char ele : my_string1)
        {
            int ascii_num = static_cast<int>(ele);
    
            if (ascii_num < 97)
            {
                ascii_num += 32;
                answer += static_cast<char>(ascii_num);
            }
            else
            {
                answer += static_cast<char>(ascii_num);
            }
        }
        cout << answer;
    }

     

    3. transform()

    transform()은 <algorithm> 헤더에 정의가 되어있는 함수입니다.

    주로 특정 함수를 써서 값을 변경할 때 사용을 하기 때문에 굳이 대소문자 변환이 아니더라도 사용할 수 있습니다.

    출처: https://en.cppreference.com/w/cpp/algorithm/transform

    transform()은 지정한 범위 first부터 last까지 원소들 각각에 대해 인자로 전달함 함수를 실행하고 그 결과를 d_first에 기록을 합니다.

    - 단항 함수: unary_op가 first1 부터 last1 까지 원소들을 인자로 전달하여 실행

    - 이항 함수: bomaru_op가 first1 부터 last1 까지 원소들과 first2 부터 동일 갯수의 원소들을 쌍으로 전달하여 실행

       ex) first1 ~ last1 까지 {1,2,3}, first2의 원소가 {4,5,6}이면, binary_op = {1,4}. {2,5}, {3,6}

     

    대소문자 예제

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int main(void)
    {
        string my_string1 = "Test";
    
        transform(my_string1.begin(), my_string1.end(), my_string1.begin(), ::toupper);
    
        cout << my_string1; //result: TEST
    }
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int main(void)
    {
        string my_string1 = "Test";
    
        transform(my_string1.begin(), my_string1.end(), my_string1.begin(), ::tolower);
    
        cout << my_string1; // result: test
    }

    'Programming > _C++' 카테고리의 다른 글

    C++_function  (0) 2023.07.21
    C++_for_while_(loop statement)  (0) 2023.07.20
    C++_if (conditional statement, 조건문)  (0) 2023.07.20
    C++?  (0) 2023.06.05
    ios::sync_with_studio, cin.tie, cout.tie  (0) 2023.05.14
Designed by Tistory.