C++ 문자열의 대문자를 소문자로 바꾸거나 소문자를 대문자로 변경해야 하는 경우가 있습니다.
문자열을 대소문자 구분없이 검색 시 대문자나 소문자로 전부 변경한 이후에 비교해서 찾을 수 있습니다.
C++에서 대문자를 소문자로 변경하거나 소문자로 대문자로 변경하는 방법을 알아보겠습니다.
1. boost::algorithm::to_upper, boost::algorithm::to_lower
boost는 C++을 위한 유용한 라이브러리입니다.
boost::algorithm::to_upper, boost::algorithm::to_lower를 사용하면 각각 대문자, 소문자로 변환이 가능합니다.
boost의 to_upper와 to_lower를 사용하는 방법은 다음과 같습니다.
#include <iostream>
#include <string>
#include <boost/algorithm/string.hpp>
int main()
{
std::string str = "abcde";
std::cout << "before: " << str << std::endl;
boost::algorithm::to_upper(str);
std::cout << "to_upper: " << str << std::endl << std::endl;
std::cout << "before: " << str << std::endl;
boost::algorithm::to_lower(str);
std::cout << "to_lower: " << str << std::endl << std::endl;
std::cout << "before: " << str << std::endl;
str = boost::algorithm::to_upper_copy(str);
std::cout << "to_upper: " << str << std::endl << std::endl;
std::cout << "before: " << str << std::endl;
str = boost::algorithm::to_lower_copy(str);
std::cout << "to_lower: " << str << std::endl << std::endl;
return 0;
}
to_upper()를 호출해서 대문자로 변환하고 to_lower()를 호출해서 소문자로 변환합니다.
기본적으로 이 함수들은 입력한 string의 내용을 직접 변환하기 때문에 원본이 변경됩니다.
원본을 변경하지 않고 새로운 string을 생성하려면 to_upper_copy()나 to_lower_copy()를 사용하면 됩니다.
다음과 같이 원래 값이 대문자나 소문자로 변경되는 결과가 출력됩니다.
boost를 사용하는 환경에서는 이 함수들을 이용하는 것을 추천합니다.
2. std::toupper, std::tolower
C++에서 기본적으로 제공되는 std::toupper와 std::tolower를 사용하는 방법도 있습니다.
C++ algorithm 헤더의 transform과 함께 사용할 수 있습니다.
std::toupper와 std::tolower를 사용한 대소문자 변환 코드는 다음과 같습니다.
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
int main()
{
std::string str = "abcde";
std::cout << "before: " << str << std::endl;
std::transform(str.cbegin(), str.cend(), str.begin(), std::toupper);
std::cout << "to_upper: " << str << std::endl << std::endl;
std::cout << "before: " << str << std::endl;
std::transform(str.cbegin(), str.cend(), str.begin(), std::tolower);
std::cout << "to_lower: " << str << std::endl << std::endl;
str = "abcde";
std::cout << "before: " << str << std::endl;
std::string upper_str = std::string(str.length(), '\0');
std::transform(str.cbegin(), str.cend(), upper_str.begin(), toupper);
std::cout << "to_upper: " << upper_str << std::endl << std::endl;
str = "ABCDE";
std::cout << "before: " << str << std::endl;
std::string lower_str = std::string(str.length(), '\0');
std::transform(str.cbegin(), str.cend(), lower_str.begin(), tolower);
std::cout << "to_lower: " << lower_str << std::endl << std::endl;
return 0;
}
transform은 결과를 저장할 변수의 반복자(Iterator)를 지정할 수 있습니다.
아래와 같이 3 번째 인자에 동일한 문자열의 반복자를 넣어주면 원래의 문자열이 변경됩니다.
std::transform(str.cbegin(), str.cend(), str.begin(), tolower);
다른 변수에 입력하려면 반드시 원본 string의 길이와 동일한 크기로 메모리가 초기화되어야 합니다.
boost를 사용할 때와 동일하게 결과가 출력됩니다.
개발 환경에 맞춰서 둘 중 원하는 방식의 대문자 ↔ 소문자 변경을 사용하면 됩니다.
'Programming > C&CPP' 카테고리의 다른 글
C++ string (문자열)의 부분 문자열 추출 (substr) (0) | 2021.02.26 |
---|---|
C++ 소수점 올림/반올림/내림 방법 (0) | 2021.02.04 |
C++ 벡터(vector) 혹은 배열에서 최대값, 최소값 찾기 (0) | 2020.09.14 |
C++ string을 int로 변경하는 방법 (0) | 2019.11.18 |
C++ int를 string으로 변경하는 방법 (0) | 2019.11.15 |