-
C++_upper_lowerProgramming/_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는 미국정보교환표준부호로 이를 사용하면 대소문자를 바꿀 수 있다.
대문자 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