C++에서 문자열을 대문자로 변환하는 방법

Jinku Hu 2023년12월11일
  1. std::transform()std::toupper()를 사용하여 문자열을 대문자로 변환
  2. icu::UnicodeStringtoUpper()를 사용하여 문자열을 대문자로 변환
  3. 특정 로케일과 함께icu::UnicodeStringtoUpper()를 사용하여 문자열을 대문자로 변환
C++에서 문자열을 대문자로 변환하는 방법

이 기사에서는 문자열을 대문자로 변환하는 방법에 대한 몇 가지 C++ 방법을 설명합니다.

std::transform()std::toupper()를 사용하여 문자열을 대문자로 변환

std::transform 메소드는 STL <algorithm>라이브러리에서 가져 왔으며 주어진 함수를 범위에 적용 할 수 있습니다. 이 예에서는이를 활용하여std::string 문자 범위에서 작동하고toupper 함수를 사용하여 각char를 대문자로 변환합니다. 이 메서드가 주어진 문자열에서 단일 바이트 문자를 성공적으로 변환하더라도 프로그램 출력에서 ​​볼 수 있듯이 다중 바이트 인코딩을 사용하는 문자는 대문자로 표시되지 않습니다.

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

using std::cout; using std::string;
using std::endl; using std::cin;
using std::transform; using std::toupper;

string capitalizeString(string s)
{
    transform(s.begin(), s.end(), s.begin(),
                   [](unsigned char c){ return toupper(c); });
    return s;
}

int main() {
    string string1("hello there είναι απλά ένα κείμενο χωρίς");
    cout << "input  string: " << string1 << endl
         <<  "output string: " << capitalizeString(string1) << endl << endl;

    return 0;
}

출력:

input  string: hello there είναι απλά ένα κείμενο χωρίς
output string: HELLO THERE είναι απλά ένα κείμενο χωρίς

icu::UnicodeStringtoUpper()를 사용하여 문자열을 대문자로 변환

위의 코드는 ASCII 문자열 및 기타 문자에 대해 잘 작동하지만 예를 들어 전달하면 특정 유니 코드 문자열 시퀀스의 경우toupper 함수는 대문자로 표시하지 않습니다. 따라서 이식 가능한 솔루션은 안정성을 제공 할 수있을만큼 성숙하고 광범위하게 액세스 할 수 있으며 코드를 교차 플랫폼에 유지할 수있는ICU (International Components for Unicode) 라이브러리의 루틴을 사용하는 것입니다.

ICU 라이브러리를 활용하려면 소스 파일에<unicode/unistr.h>,<unicode/ustream.h><unicode/locid.h>헤더를 포함해야합니다. 이러한 라이브러리가 이미 설치되어 운영 체제에 사용 가능할 가능성이 높으며 코드 예제는 정상적으로 작동합니다. 그러나 컴파일 타임 오류가 발생하면 특정 플랫폼 용 라이브러리를 다운로드하는 방법에 대한 ICU 웹 사이트의 지침을 참조하십시오.

ICU 라이브러리 종속성과 성공적으로 연결하려면 다음 컴파일러 플래그를 제공해야합니다.

g++ sample_code.cpp -licuio -licuuc -o sample_code
#include <iostream>
#include <string>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <unicode/locid.h>

using std::cout; using std::string;
using std::endl; using std::cin;
using std::transform; using std::toupper;

int main() {
    string string1("hello there είναι απλά ένα κείμενο χωρίς");

    icu::UnicodeString unicodeString(string1.c_str());
    cout << "input string:  " << string1 << endl
        <<  "output string: " << unicodeString.toUpper() << endl;

    return 0;
}

출력:

input string:  hello there είναι απλά ένα κείμενο χωρίς
output string: HELLO THERE ΕΊΝΑΙ ΑΠΛΆ ΈΝΑ ΚΕΊΜΕΝΟ ΧΩΡΊΣ

특정 로케일과 함께icu::UnicodeStringtoUpper()를 사용하여 문자열을 대문자로 변환

toUpper함수는 locale매개 변수를 받아 특정 locale규칙에 따라 문자열에서 작동 할 수도 있습니다. 전달할 인수는icu::Locale 객체로 별도로 생성하거나 다음 코드 샘플에 설명 된대로 문자열 리터럴의 로케일을toUpper 함수에 지정할 수 있습니다.

#include <unicode/locid.h>
#include <unicode/unistr.h>
#include <unicode/ustream.h>

#include <iostream>

int main() {
  string string2 = "Contrairement à une opinion répandue";

  icu::UnicodeString unicodeString2(string2.c_str());
  cout << unicodeString2.toUpper("fr-FR") << endl;

  return 0;
}
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ String