개발 공부/c++

c++ 한글 문자열 사용하기

그냥하는티스토리 2022. 10. 21. 16:30
728x90

한글로 된 문자를 출력하려고 코드를 작성하던 중,

1byte씩 출력시 비정상적으로 출력 되는 것을 발견 했다.

그 이유는, 한글은 3 byte인데, 1 byte씩 출력하면 깨져서 나오기 때문이다.

 

    string korean = "가나다라";
    cout << korean << endl;
    cout << korean[0] << "   " << endl;
    cout << sizeof(korean) << endl;
    cout << korean.size() << endl;

 

다음은 위 코드를 출력 한 결과 이다.

가나다라
�   
24
12

 

만약 한글자씩 이동 또는 출력 하고 싶다면, 3글자씩 묶어서 다음과 같이 처리 해야 한다.

1. 한글자를 출력 하고 싶은 경우

    // "가"를 출력 하고 싶을 경우
    cout << korean[0] << korean[1] << korean[2] << endl;

 

2. 한글의 한글자를 다른 한글자와 swap하고 싶은 경우

    // "가" 와 "나" 의 순서를 바꾸고 싶은 경우
    // 1. 가를 buf에 저장(3개씩 저장)
    char buf[3] = {0,};
    buf[0] = korean[0];
    buf[1] = korean[1];
    buf[2] = korean[2];

    // 2.나를 가에 저장
    korean[0] = korean[3];
    korean[1] = korean[4];
    korean[2] = korean[5];

    // 3. 버퍼에 저장된 가를 나 위치에 저장
    korean[3] = buf[0];
    korean[4] = buf[1];
    korean[5] = buf[2];

    // 4.최종 확인
    cout << korean << endl;

 

* 필요시 utf인코딩에 맞는 string을 선택하면, 더욱 쉽게 처리 할 수 있다.

std::string std::basic_string<char>  
std::wstring std::basic_string<wchar_t> wchar_t 의 크기는 시스템 마다 다름. 윈도우에서는 2 바이트이고, 유닉스 시스템에서는 4 바이트
std::u8string std::basic_string<char8_t> C++ 20 에 새로 추가되었음; char8_t 는 1 바이트; UTF-8 문자열을 보관할 수 있음
std::u16string std::basic_string<char16_t> char16_t 는 2 바이트; UTF-16 문자열을 보관할 수 있음
std::u32string std::basic_string<char32_t> char32_t 는 4 바이트; UTF-32 문자열을 보관할 수 있음

 

 

 

728x90