본문 바로가기
C++/C++

[C++] wstring

by sihyeong 2022. 11. 14.

wstring

  • 여러 나라의 언어를 표현하기 위해 사용하는 전용 string이다.
  • 한 문자를 표현하기 위해서 1byte가 아닌 2,3 그 이상의 byte를 사용하기 때문에 생기는 문제점을 해결하기 위해 사용한다.
  • 예를들면 "홍길동" 을 입력받기 위해 char[3]을 만들면 "ㅎㅗㅇ" 한글자 밖에 받지 못한다.
  • 출력할 때도 마찬가지다 홍을 표현하기 위해 0~2까지 출력해야한다.
  • 이러한 이유로 윈도우 프로그래밍도 w__ 자료형을 쓴다.
  • wstring 외에도 wchar_t 등등과 전용 메소드가 있으니 찾아보길 바란다.

 

  • 프로젝트의 속성에 문자 집합이 기본은 "유니코드 문자 집합"으로 되어있다.
  • 본인은 wstring이나 그런거 쓰기 싫다 하시는 사람은 "멀티바이트 문자 집합" 으로 바꾸고 string 사용하면 되겠다.
  • 다만, 기존의 프로젝트의 유니코드 작업내역과 충돌이라던지, 프로젝트마다 세팅의 번거로움, 한글을 표현하기 위한 고통은 본인의 몫이니 배워서 쓰는 것이 마음 편하다.
  • 이러한 문제를 해결하기 위해 나온게 T매크로다.
  • TCHAR를 변수로 쓰면 멀티바이트에선 char, 유니코드에선 wchar_t로 인식한다.

 

사용법

#include <string>
#include <locale>
  • string 헤더에 wstring이 들어있기 때문에 따로 #include <wstring>처럼 사용하지 않는다.
wcin.imbue(locale("korea"));
wcout.imbue(locale("korea"));
  • 위에서 설명했듯 언어마다 해석하는 기준이 다르기 때문에 cin, cout 과정에서 들어오는 데이터를 한글로 인식해서 처리하겠다를 알려줘야한다.
std::locale::global(locale("korea"));
  • 위와 같이 모든 곳의 처리를 한글로 지정하겠다 라고 할 수도 있다.
wcout << L"자연수를 입력해주세요" << endl;
  • 문자를 사용할 땐 L을 붙여서 사용해야 한다.
  • wcout은 cout의 w버전
  • wcin도 마찬가지

 

Dev Drive [C++/MFC] 멀티바이트, 유니코드 개념 정리 / 문자열 변환 방법 https://dev-drive.tistory.com/11

 

'C++ > C++' 카테고리의 다른 글

[C++] 미리 컴파일된 헤더  (0) 2022.11.14
[C++] 멀티바이트, 유니코드  (0) 2022.11.14
[C++] constexpr  (0) 2022.11.13
[C++] delete와 소멸자 ~class()  (0) 2022.10.13
[C++] 헤더 / 라이브러리에 관해  (1) 2022.10.11