[C++] string 대문자/소문자 변환 방법

string의 문자들을 모두 대문자로 변경하거나 소문자로 변경하는 방법을 소개합니다.

1. string의 대문자/소문자 변환 : 직접 구현

1.1 대문자 변환

for 반복문으로 string의 모든 요소를 순회하면서 대문자 또는 소문자로 변환할 수 있습니다. std::toupper(int ch)는 인자로 전달되는 문자를 대문자로 변경합니다.

#include <iostream>
#include <algorithm>
#include <string>

int main() {

    std::string str = "Hello World";

    for (int i = 0; i < str.size(); i++) {
        str[i] = std::toupper(str[i]);
    }

    std::cout << str << std::endl;

    return 0;
}

Output:

HELLO WORLD

1.2 소문자 변환

다음 코드는 std::tolower(int ch)를 사용하여 string을 소문자로 변환하는 예제입니다.

#include <iostream>
#include <algorithm>
#include <string>

int main() {

    std::string str = "Hello World";

    for (int i = 0; i < str.size(); i++) {
        str[i] = std::tolower(str[i]);
    }

    std::cout << str << std::endl;

    return 0;
}

Output:

hello world

2. string의 대문자/소문자 변환 : transform, toupper(), tolower()

std::transform()과 toupper(), tolower()를 함께 사용하여 string을 대문자, 소문자로 변환할 수 있습니다.

transform()은 transform(first, last, d_first, unary_op)처럼 인자를 받습니다. 변환할 string의 첫번째와 마지막을 first와 last로 인자를 전달하고, 변환하여 저장될 string의 첫번째 위치를 d_first(destination first)로 인자를 전달합니다. unary_op는 변환에 대한 구현 코드가 됩니다.

2.1 대문자 변환

아래 예제는 transform()으로 string을 대문자로 변환하는 예제입니다. unary_op는 Lambda로 전달하였으며, 문자에 toupper()를 적용하여 대문자로 변환합니다.

#include <iostream>
#include <algorithm>
#include <string>

int main() {

    std::string str = "Hello World";

    std::transform(str.begin(), str.end(), str.begin(),
            [](unsigned char c){ return toupper(c); });

    std::cout << str << std::endl;

    return 0;
}

Output:

HELLO WORLD

2.2 소문자 변환

소문자로 변환하려면 아래와 같이 tolower()를 사용해야 합니다.

#include <iostream>
#include <algorithm>
#include <string>

int main() {

    std::string str = "Hello World";

    std::transform(str.begin(), str.end(), str.begin(),
            [](unsigned char c){ return tolower(c); });

    std::cout << str << std::endl;

    return 0;
}

Output:

hello world

위에서 인자로 전달한 Lambda는 ::toupper 또는 ::tolower와 같은 표현식으로 대체하여 더 적은 코드로 동일한 내용을 구현할 수 있습니다.

std::string str = "Hello World";
std::transform(str.begin(), str.end(), str.begin(), ::toupper);
std::cout << "Upper case: " << str << std::endl;

std::transform(str.begin(), str.end(), str.begin(), ::tolower);
std::cout << "Lower case: " << str << std::endl;

Output:

Upper case: HELLO WORLD
Lower case: hello world
Loading script...
codechachaCopyright ©2019 codechacha