이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요 ;)
보통 프로그램을 만들 때 많이 필요한 기능은 바로 문자열을 입력받거나 가져오는 기능입니다. 이번 포스팅에서는 C++ 언어에서 문자열을 사용하는 std::string과 std::wstring에 대해 알아보겠습니다.
.
.
using string = basic_string<char, char_traits<char>, allocator<char>>;
using wstring = basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>;
.
.
visual studio의 기능 중 go to definition을 통해 std::string과 std::wstring을 관찰?하면 위와 같은 코드를 볼 수 있습니다.
코드의 모든 의미를 알 수는 없지만, basic_string이라는 클래스에 각각 다른 char과 wchar_t라는 자료형으로 템플리타이즈된 클래스라는 정도로 이해할 수 있습니다.
char 자료형은 알고 있는데, wchar_t는 무엇인가?라고 궁금하시다면, 이번에는 go to declaration을 사용해서 관찰해보겠습니다.
typedef unsigned short wchar_t;
wchar_t는 unsigned short입니다. char은 데이터 사이즈가 작다보니 표현할 수 있는 문자에도 한계가 있기 때문에, 표현해야 할 문자가 많을 때 비교적 선택의 폭이 넓은 wchar_t를 사용한다고 합니다.
일반 영어 알파벳은 char을 사용해서 표현할 수 있지만, 한글, 러시아어 등등의 세계어를 표현해야 할 땐 wchar_t를 사용한다고 합니다.
#include <iostream>
#include <cstddef>
#include <iostream>
#include <locale>
int main(void)
{
{
const std::wstring texts[] =
{
L"Ñá", //Spanish
L"forêt intérêt", //French
L"Gesäß", //German
L"取消波蘇日奇諾", //Chinesse
L"日本人のビット", //Japanese
L"немного русский", //Russian
L"ένα κομμάτι της ελληνικής", //Greek
L"ਯੂਨਾਨੀ ਦੀ ਇੱਕ ਬਿੱਟ", //Punjabi
L"کمی از ایران ", //Persian
L"కానీ ఈ ఏమి నరకం ఉంది?", //Telugu
L"Но какво, по дяволите, е това?" //Bulgarian
};
std::locale::global(std::locale(""));
std::wcout.imbue(std::locale());
for (size_t i = 0; i < 11; ++i)
std::wcout << texts[i] << std::endl;
}
}
wstring의 사용방법은 string과 같이 std::wstring을 선언하고 변수 혹은 배열의 이름을 정해주면 됩니다.
wstring의 표현 범위를 보여드리기 위해 다양한 나라의 언어들을 texts[] 배열에 포함시켰고,
std::local()과 std::wcout 설정을 해줬습니다.(이부분은 저도 자세히 잘 모르겠습니다ㅠ).
그리고 for문을 통해 배열을 하나씩 출력해보면
모든 나라의 문자열은 아니지만, 그래도 많은 나라의 문자열을 표현하는 걸 볼 수 있습니다.
지금까지 std::string, 사실 std::wstring에 대한 간단한 설명이었습니다.
더 자세한 내용은 다음 포스팅에서 다루겠습니다.
'Information Technology > C++' 카테고리의 다른 글
[C++] std::string의 길이와 용량 (0) | 2019.12.08 |
---|---|
[C++] std::string의 여러가지 생성자들과 형변환 (0) | 2019.12.07 |
[C++] 순환 의존성 문제와 weak_ptr (0) | 2019.12.05 |
[C++] std::shared_ptr (0) | 2019.12.04 |
[C++] std::unique_ptr(2) (0) | 2019.12.02 |