Share via


ctype 클래스

문자를 분류하고, 대문자에서 소문자로 변환하고, 네이티브 문자 집합과 로캘에서 사용하는 문자 집합 사이에서 변환하는 데 사용하는 패싯을 제공하는 클래스입니다.

구문

template <class CharType>
class ctype : public ctype_base;

매개 변수

Chartype
문자를 인코딩하기 위해 프로그램 내 사용하는 형식

설명

모든 로캘 패싯과 마찬가지로, 고정 개체 ID에는 초기값 0이 저장되어 있습니다. 저장된 값에 액세스를 처음 시도하면 id에 고유한 양수 값이 저장됩니다. 분류 기준에는 기본 클래스 ctype_base에 중첩된 비트 마스크 형식이 있습니다.

C++ 표준 라이브러리는 이 클래스 템플릿의 두 가지 명시적 특수화를 정의합니다.

  • ctype<char>- 차이점을 별도로 설명하는 명시적 특수화입니다. 자세한 내용은 클래스를 참조 ctype<char> 하세요.

  • ctype<wchar_t>는 요소를 와이드 문자로 처리합니다.

클래스 템플릿 ctype<CharType>의 기타 전문화:

  • CharType 형식의 값 ch를 식(char)ch이 있는 형식 char 값으로 변환합니다.

  • 형식 char 의 값 바이트를CharType(byte)이 있는 CharType 형식의 값으로 변환합니다.

다른 모든 작업은 명시적 특수화와 동일한 방식으로 값에 대해 수행 char 됩니다 ctype<char>.

생성자

생성자 Description
ctype 문자의 로캘 패싯으로 사용할 수 있는 ctype 클래스의 개체에 대한 생성자입니다.

Typedef

형식 이름 설명
char_type 로캘에서 사용하는 문자를 설명하는 형식

멤버 함수

멤버 함수 설명
do_is 단일 문자에 특정 특성이 있는지 여부를 테스트하거나 범위에 있는 각 문자의 특성을 분류하고 배열에 저장하기 위해 호출하는 가상 함수입니다.
do_narrow 로캘에서 사용하는 CharType 형식의 문자를 네이티브 문자 집합의 char 형식의 해당 문자로 변환하기 위해 호출하는 가상 함수입니다.
do_scan_is 범위에서 지정된 마스크와 일치하는 첫 번째 문자를 찾기 위해 호출하는 가상 함수입니다.
do_scan_not 범위에서 지정된 마스크와 일치하지 않는 첫 번째 문자를 찾기 위해 호출하는 가상 함수입니다.
do_tolower 문자 또는 문자 범위를 소문자로 변환하기 위해 호출하는 함수입니다.
do_toupper 문자 또는 문자 범위를 대문자로 변환하기 위해 호출하는 함수입니다.
do_widen 네이티브 문자 집합의 char 형식의 문자를 로캘에서 사용하는 CharType 형식의 문자로 변환하기 위해 호출하는 가상 함수입니다.
is 단일 문자에 특정 특성이 있는지 여부를 테스트하거나 범위에 있는 각 문자의 특성을 분류하고 배열에 저장합니다.
narrow 로캘에서 사용하는 CharType 형식의 문자를 네이티브 문자 집합의 형식 문자의 해당 문자로 변환합니다.
scan_is 범위에서 지정된 마스크와 일치하는 첫 번째 문자를 찾습니다.
scan_not 범위에서 지정된 마스크와 일치하지 않는 첫 번째 문자를 찾습니다.
tolower 문자 또는 문자 범위를 소문자로 변환합니다.
toupper 문자 또는 문자 범위를 대문자로 변환합니다.
widen 네이티브 문자 집합의 char 형식의 문자를 로캘에서 사용하는 CharType 형식의 해당 문자로 변환합니다.

요구 사항

헤더:<로캘>

네임스페이스: std

ctype::char_type

로캘에서 사용하는 문자를 설명하는 형식

typedef CharType char_type;

설명

이 형식은 템플릿 매개 변수 CharType과 동일한 의미입니다.

예시

char_type을 반환 값으로 사용하는 예제는 멤버 함수 widen을 참조하세요.

ctype::ctype

문자의 로캘 패싯으로 사용할 수 있는 ctype 클래스의 개체에 대한 생성자입니다.

explicit ctype(size_t _Refs = 0);

매개 변수

_심판
개체에 대한 메모리 관리의 유형을 지정하는 데 사용하는 정수 값입니다.

설명

_Refs 매개 변수 및 해당 중요도에 사용할 수 있는 값은 다음과 같습니다.

  • 0: 개체를 포함하는 로캘에 의해 개체의 수명이 관리됩니다.

  • 1: 개체의 수명을 수동으로 관리해야 합니다.

  • > 1: 이러한 값은 정의되지 않습니다.

소멸자는 보호되므로 직접적인 예제는 확인할 수 없습니다.

생성자는 locale::facet( _Refs)를 통해 해당 locale::facet 기본 개체를 초기화합니다.

ctype::d o_is

단일 문자에 특정 특성이 있는지 여부를 테스트하거나 범위에 있는 각 문자의 특성을 분류하고 배열에 저장하기 위해 호출하는 가상 함수입니다.

virtual bool do_is(
    mask maskVal,
    CharType ch) const;

virtual const CharType *do_is(
    const CharType* first,
    const CharType* last,
    mask* dest) const;

매개 변수

maskVal
문자를 테스트할 마스크 값입니다.

ch
특성을 테스트할 문자입니다.

first
특성을 분류할 범위 내 첫 번째 문자에 대한 포인터입니다.

last
특성을 분류할 범위 내 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

dest
각 문자의 특성에 대한 특징을 지정하는 마스크 값을 저장할 배열의 시작 부분에 대한 포인터입니다.

Return Value

첫 번째 멤버 함수는 테스트된 문자에 마스크 값 true 으로 설명된 특성이 있는 경우( 특성이 없는 경우) false 인 부울 값을 반환합니다.

두 번째 멤버 함수는 범위 내 각 문자의 특성에 대한 특징을 지정하는 마스크 값을 포함하는 배열을 반환합니다.

설명

문자의 특성을 분류하는 마스크 값은 ctype이 파생되는 ctype_base 클래스에서 제공합니다. 첫 번째 멤버 함수는 비트 마스크라고 하는 첫 번째 매개 변수에 대한 식을 수락하고 비트 연산자(|, , &,^~)에 의해 마스크 값의 조합으로 구성됩니다.

예시

do_is를 호출하는 is에 대한 예제를 참조하세요.

ctype::d o_narrow

로캘에서 사용하는 CharType 형식의 문자를 네이티브 문자 집합의 char 형식의 해당 문자로 변환하기 위해 호출하는 가상 함수입니다.

virtual char do_narrow(
    CharType ch,
    char default = '\0') const;

virtual const CharType* do_narrow(
    const CharType* first,
    const CharType* last,
    char default,
    char* dest) const;

매개 변수

ch
로캘에서 변환하는 데 사용하는 Chartype 형식의 문자입니다.

default
멤버 함수에서 char 형식에 해당하는 문자가 없는 CharType 형식의 문자에 할당할 기본값입니다.

first
변환할 문자 범위의 첫 번째 문자에 대한 포인터입니다.

last
변환할 문자 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

dest
변환한 문자 범위를 저장하는 대상 범위 내 char 형식의 첫 번째 문자에 대한 const 포인터입니다.

Return Value

첫 번째 보호된 멤버 함수는 형식의 매개 변수 문자에 해당하는 문자 형식의 네이티브 문자를 반환하거나 해당 문자 CharType 가 정의되지 않은 경우 기본값을 반환합니다.

두 번째 보호된 멤버 함수는 CharType 형식의 문자에서 변환된 네이티브 문자의 대상 범위에 대한 포인터를 반환합니다.

설명

두 번째 보호된 멤버 템플릿 함수는 간격 [0, )에 대한 [] 값do_narrow( first [ I]default, last - first)에 저장dest됩니다. II

예시

do_narrow를 호출하는 narrow에 대한 예제를 참조하세요.

ctype::d o_scan_is

범위에서 지정된 마스크와 일치하는 첫 번째 문자를 찾기 위해 호출하는 가상 함수입니다.

virtual const CharType *do_scan_is(
    mask maskVal,
    const CharType* first,
    const CharType* last) const;

매개 변수

maskVal
문자로 일치할 마스크 값입니다.

first
검색할 범위의 첫 번째 문자에 대한 포인터입니다.

last
검색할 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

Return Value

지정된 마스크와 일치하는 범위의 첫 번째 문자에 대한 포인터입니다. 이러한 값이 없으면 함수가 마지막으로 반환됩니다.

설명

보호된 멤버 함수는 do_is( maskVal, * ptr)가 true인 [first, last) 범위의 가장 작은 포인터 ptr을 반환합니다.

예시

do_scan_is를 호출하는 scan_is에 대한 예제를 참조하세요.

ctype::d o_scan_not

범위에서 지정된 마스크와 일치하지 않는 첫 번째 문자를 찾기 위해 호출하는 가상 함수입니다.

virtual const CharType *do_scan_not(
    mask maskVal,
    const CharType* first,
    const CharType* last) const;

매개 변수

maskVal
문자로 일치하지 않을 마스크 값입니다.

first
검색할 범위의 첫 번째 문자에 대한 포인터입니다.

last
검색할 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

Return Value

지정된 마스크와 일치하지 않은 범위의 첫 번째 문자에 대한 포인터입니다. 이러한 값이 없으면 함수가 마지막으로 반환됩니다.

설명

보호된 멤버 함수는 do_is( maskVal, * ptr)가 false인 [first, last) 범위의 가장 작은 포인터 ptr을 반환합니다.

예시

do_scan_not을 호출하는 scan_not에 대한 예제를 참조하세요.

ctype::d o_tolower

문자 또는 문자 범위를 소문자로 변환하기 위해 호출하는 가상 함수입니다.

virtual CharType do_tolower(CharType ch) const;

virtual const CharType *do_tolower(
    CharType* first,
    const CharType* last) const;

매개 변수

ch
소문자로 변환할 문자입니다.

first
대/소문자를 변환할 문자 범위의 첫 번째 문자에 대한 포인터입니다.

last
대/소문자를 변환할 문자 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

Return Value

첫 번째 보호된 멤버 함수는 매개 변수 ch의 소문자 형식을 반환합니다. 소문자 양식이 없으면 ch를 반환합니다. 보호된 두 번째 멤버 함수는 마지막으로 반환됩니다.

설명

두 번째 보호된 멤버 템플릿 함수는 간격 [0, - lastfirstI ), with do_tolower( first [ I])에서 각 요소 first [I]를 대체합니다.

예시

do_tolower를 호출하는 tolower에 대한 예제를 참조하세요.

ctype::d o_toupper

문자 또는 문자 범위를 대문자로 변환하기 위해 호출하는 함수입니다.

virtual CharType do_toupper(CharType ch) const;

virtual const CharType *do_toupper(
    CharType* first,
    const CharType* last) const;

매개 변수

ch
대문자로 변환할 문자입니다.

first
대/소문자를 변환할 문자 범위의 첫 번째 문자에 대한 포인터입니다.

last
대/소문자를 변환할 문자 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

Return Value

보호된 첫 번째 멤버 함수는 매개 변수 ch의 대문자 형식을 반환합니다. 대문자 양식이 없으면 ch를 반환합니다. 보호된 두 번째 멤버 함수는 마지막으로 반환됩니다.

설명

두 번째 보호된 멤버 템플릿 함수는 간격 [0, - lastfirstI ), with do_toupper( first [ I])에서 각 요소 first [I]를 대체합니다.

예시

do_toupper를 호출하는 toupper에 대한 예제를 참조하세요.

ctype::d o_widen

네이티브 문자 집합의 char 형식의 문자를 로캘에서 사용하는 CharType 형식의 문자로 변환하기 위해 호출하는 가상 함수입니다.

virtual CharType do_widen(char byte) const;

virtual const char *do_widen(
    const char* first,
    const char* last,
    CharType* dest) const;

매개 변수

바이트
변환할 네이티브 문자 집합 내 char 형식의 문자입니다.

first
변환할 문자 범위의 첫 번째 문자에 대한 포인터입니다.

last
변환할 문자 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

dest
변환한 문자 범위를 저장하는 대상 범위 내 CharType 형식의 첫 번째 문자에 대한 포인터입니다.

Return Value

첫 번째 보호된 멤버 함수는 네이티브 char 형식의 매개 변수 문자에 해당하는 CharType 형식의 문자를 반환합니다.

두 번째 보호된 멤버 함수는 char 형식의 네이티브 문자에서 변환된 로캘에서 사용하는 CharType 형식 문자의 대상 범위에 대한 포인터를 반환합니다.

설명

두 번째 보호된 멤버 템플릿 함수는 [0, last - first) 간격의 I에 대해 do_widen( first[ I]) 값을 dest[ I]에 저장합니다.

예시

do_widen을 호출하는 widen에 대한 예제를 참조하세요.

ctype::is

단일 문자에 특정 특성이 있는지 여부를 테스트하거나 범위에 있는 각 문자의 특성을 분류하고 배열에 저장합니다.

bool is(mask maskVal, CharType ch) const;

const CharType *is(
    const CharType* first,
    const CharType* last,
    mask* dest) const;

매개 변수

maskVal
문자를 테스트할 마스크 값입니다.

ch
특성을 테스트할 문자입니다.

first
특성을 분류할 범위 내 첫 번째 문자에 대한 포인터입니다.

last
특성을 분류할 범위 내 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

dest
각 문자의 특성에 대한 특징을 지정하는 마스크 값을 저장할 배열의 시작 부분에 대한 포인터입니다.

Return Value

첫 번째 멤버 함수는 테스트한 문자가 마스크 값에서 설명한 특성을 포함하는 경우 true를 반환하며 특성을 포함하지 못하는 경우 false를 반환합니다.

두 번째 멤버 함수는 특성을 분류할 범위의 마지막 문자에 대한 포인터를 반환합니다.

설명

문자의 특성을 분류하는 마스크 값은 ctype이 파생되는 ctype_base 클래스에서 제공합니다. 첫 번째 멤버 함수는 비트 마스크라고 하는 첫 번째 매개 변수에 대한 식을 수락하고 비트 연산자(|, , &,^~)에 의해 마스크 값의 조합으로 구성됩니다.

예시

// ctype_is.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main() {
   locale loc1 ( "German_Germany" ), loc2 ( "English_Australia" );

   if (use_facet<ctype<char> > ( loc1 ).is( ctype_base::alpha, 'a' ))
      cout << "The character 'a' in locale loc1 is alphabetic."
           << endl;
   else
      cout << "The character 'a' in locale loc1 is not alphabetic."
           << endl;

   if (use_facet<ctype<char> > ( loc2 ).is( ctype_base::alpha, '!' ))
      cout << "The character '!' in locale loc2 is alphabetic."
           << endl;
   else
      cout << "The character '!' in locale loc2 is not alphabetic."
           << endl;

   char *string = "Hello, my name is John!";
   ctype<char>::mask maskarray[30];
   use_facet<ctype<char> > ( loc2 ).is(
      string, string + strlen(string), maskarray );
   for (unsigned int i = 0; i < strlen(string); i++) {
      cout << string[i] << ": "
           << (maskarray[i] & ctype_base::alpha  "alpha"
                                                : "not alpha")
           << endl;;
   };
}

ctype::narrow

로캘에서 사용하는 CharType 형식의 문자를 네이티브 문자 집합 내 char 형식의 해당 문자로 변환합니다.

char narrow(CharType ch, char default = '\0') const;

const CharType* narrow(
    const CharType* first,
    const CharType* last,
    char default,
    char* dest) const;

매개 변수

ch
로캘에서 변환하는 데 사용하는 Chartype 형식의 문자입니다.

default
멤버 함수에서 char 형식에 해당하는 문자가 없는 CharType 형식의 문자에 할당할 기본값입니다.

first
변환할 문자 범위의 첫 번째 문자에 대한 포인터입니다.

last
변환할 문자 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

dest
변환한 문자 범위를 저장하는 대상 범위 내 char 형식의 첫 번째 문자에 대한 const 포인터입니다.

Return Value

첫 번째 멤버 함수는 정의된 해당 문자가 없는 경우 CharType default 형식의 매개 변수 문자에 해당하는 char 형식의 네이티브 문자를 반환합니다.

두 번째 멤버 함수는 CharType 형식의 문자에서 변환된 네이티브 문자의 대상 범위에 대한 포인터를 반환합니다.

설명

첫 번째 멤버 함수는 do_narrow(ch, default)를 반환합니다. 두 번째 멤버 함수는 do_narrow(, , last,destdefault)를 반환first합니다. 기본 소스 문자만 narrow 아래에 고유 역 이미지 CharType을 포함하는 것이 보장됩니다. 이러한 기본 소스 문자의 경우 narrow ( widen ( c ), 0 ) == c와 같이 고정 값을 유지합니다.

예시

// ctype_narrow.cpp
// compile with: /EHsc /W3
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "english" );
   wchar_t *str1 = L"\x0392fhello everyone";
   char str2 [16];
   bool result1 = (use_facet<ctype<wchar_t> > ( loc1 ).narrow
      ( str1, str1 + wcslen(str1), 'X', &str2[0] ) != 0);  // C4996
   str2[wcslen(str1)] = '\0';
   wcout << str1 << endl;
   cout << &str2[0] << endl;
}
Xhello everyone

ctype::scan_is

범위에서 지정된 마스크와 일치하는 첫 번째 문자를 찾습니다.

const CharType *scan_is(
    mask maskVal,
    const CharType* first,
    const CharType* last) const;

매개 변수

maskVal
문자로 일치할 마스크 값입니다.

first
검색할 범위의 첫 번째 문자에 대한 포인터입니다.

last
검색할 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

Return Value

지정된 마스크와 일치하는 범위의 첫 번째 문자에 대한 포인터입니다. 이러한 값이 없으면 함수가 마지막으로 반환됩니다.

설명

멤버 함수는 do_scan_is(maskVal, first, last)를 반환합니다.

예시

// ctype_scan_is.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "German_Germany" );

   char *string = "Hello, my name is John!";

   const char* i = use_facet<ctype<char> > ( loc1 ).scan_is
      ( ctype_base::punct, string, string + strlen(string) );
   cout << "The first punctuation is \"" << *i << "\" at position: "
      << i - string << endl;
}
The first punctuation is "," at position: 5

ctype::scan_not

범위에서 지정된 마스크와 일치하지 않는 첫 번째 문자를 찾습니다.

const CharType *scan_not(
    mask maskVal,
    const CharType* first,
    const CharType* last) const;

매개 변수

maskVal
문자로 일치하지 않을 마스크 값입니다.

first
검색할 범위의 첫 번째 문자에 대한 포인터입니다.

last
검색할 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

Return Value

지정된 마스크와 일치하지 않은 범위의 첫 번째 문자에 대한 포인터입니다. 이러한 값이 없으면 함수가 마지막으로 반환됩니다.

설명

멤버 함수는 do_scan_not(maskVal, first, last)를 반환합니다.

예시

// ctype_scan_not.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "German_Germany" );

   char *string = "Hello, my name is John!";

   const char* i = use_facet<ctype<char> > ( loc1 ).scan_not
      ( ctype_base::alpha, string, string + strlen(string) );
   cout << "First nonalpha character is \"" << *i << "\" at position: "
      << i - string << endl;
}
First nonalpha character is "," at position: 5

ctype::tolower

문자 또는 문자 범위를 소문자로 변환합니다.

CharType tolower(CharType ch) const;

const CharType *tolower(CharType* first, const CharType* last) const;

매개 변수

ch
소문자로 변환할 문자입니다.

first
대/소문자를 변환할 문자 범위의 첫 번째 문자에 대한 포인터입니다.

last
대/소문자를 변환할 문자 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

Return Value

첫 번째 멤버 함수는 매개 변수 ch의 소문자 형식을 반환합니다. 소문자 양식이 없으면 ch를 반환합니다.

두 번째 멤버 함수는 마지막을 반환합니다.

설명

첫 번째 멤버 함수는 do_tolower()를ch 반환합니다. 두 번째 멤버 함수는 do_tolower(first, last)를 반환합니다.

예시

// ctype_tolower.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "German_Germany" );

   char string[] = "HELLO, MY NAME IS JOHN";

   use_facet<ctype<char> > ( loc1 ).tolower
      ( string, string + strlen(string) );
   cout << "The lowercase string is: " << string << endl;
}
The lowercase string is: hello, my name is john

ctype::toupper

문자 또는 문자 범위를 대문자로 변환합니다.

CharType toupper(CharType ch) const;
const CharType *toupper(CharType* first, const CharType* last) const;

매개 변수

ch
대문자로 변환할 문자입니다.

first
대/소문자를 변환할 문자 범위의 첫 번째 문자에 대한 포인터입니다.

last
대/소문자를 변환할 문자 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

Return Value

첫 번째 멤버 함수는 매개 변수 ch의 대문자 형식을 반환합니다. 대문자 양식이 없으면 ch를 반환합니다.

두 번째 멤버 함수는 마지막을 반환합니다.

설명

첫 번째 멤버 함수는 do_toupper()를ch 반환합니다. 두 번째 멤버 함수는 do_toupper( first, last)를 반환합니다.

예시

// ctype_toupper.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "German_Germany" );

   char string[] = "Hello, my name is John";

   use_facet<ctype<char> > ( loc1 ).toupper
      ( string, string + strlen(string) );
   cout << "The uppercase string is: " << string << endl;
}
The uppercase string is: HELLO, MY NAME IS JOHN

ctype::widen

네이티브 문자 집합의 char 형식의 문자를 로캘에서 사용하는 CharType 형식의 해당 문자로 변환합니다.

CharType widen(char byte) const;
const char *widen(const char* first, const char* last, CharType* dest) const;

매개 변수

바이트
변환할 네이티브 문자 집합 내 char 형식의 문자입니다.

first
변환할 문자 범위의 첫 번째 문자에 대한 포인터입니다.

last
변환할 문자 범위의 마지막 문자 바로 다음에 있는 문자에 대한 포인터입니다.

dest
변환한 문자 범위를 저장하는 대상 범위 내 CharType 형식의 첫 번째 문자에 대한 포인터입니다.

Return Value

첫 번째 멤버 함수는 네이티브 char 형식의 매개 변수 문자에 해당하는 CharType 형식의 문자를 반환합니다.

두 번째 멤버 함수는 char 형식의 네이티브 문자에서 변환된 로캘에서 사용하는 CharType 형식 문자의 대상 범위에 대한 포인터를 반환합니다.

설명

첫 번째 멤버 함수는 do_widen()를byte 반환합니다. 두 번째 멤버 함수는 do_widen(first, last, dest)를 반환합니다.

예시

// ctype_widen.cpp
// compile with: /EHsc /W3
#include <locale>
#include <iostream>
using namespace std;

int main( )
{
   locale loc1 ( "English" );
   char *str1 = "Hello everyone!";
   wchar_t str2 [16];
   bool result1 = (use_facet<ctype<wchar_t> > ( loc1 ).widen
      ( str1, str1 + strlen(str1), &str2[0] ) != 0);  // C4996
   str2[strlen(str1)] = '\0';
   cout << str1 << endl;
   wcout << &str2[0] << endl;

   ctype<wchar_t>::char_type charT;
   charT = use_facet<ctype<char> > ( loc1 ).widen( 'a' );
}
Hello everyone!
Hello everyone!

참고 항목

<로캘>
C++ 표준 라이브러리의 스레드 보안