오늘 문자열 탐색 알고리즘 조지고 트리구조 클래스 써가면서 재밌게 할라 했는데
ㅄ같은 과거의 내가 "ㅎㅎ 책대로 영어만 쓰면 하는 의미가 없으니 유니코드로 문자열 탐색알고리즘 써야지"
라고 생각해서 별의 별 ㅈㄹ을 다해봄
wstring 이랑 wchar_t도 써보고
그래서 어찌어찌 출력까진 성공시켰는데..
The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text.
이거 보니 결국 wchar_t는 안좋은 것 같고..
몇 시간동안 고민한결과는 아래와 같음
1. 아스키는 딱 1바이트만 차지하고, char형에 딱 들어 맞음.
2. UTF-8은 1~4바이트를 차지하고 얼마나 차지하는 지는 문자마다 제각각임.
3. UTF-16은 대부분 2바이트를 차지하지만 이모지 같은 것들은 4바이트를 차지하기도 함. 크기가 2바이트인 wchar_t와 대체로 들어맞음
4. UTF-8은 그냥 string으로 하면 mystring[2]과 같이 특정 n번째 문자에 접근할 때, char기준 n번째에 접근해서 제대로 출력이 안됨.
5. UTF-16은 wstring을 쓰면 4바이트짜리가 섞인 경우 빼고 n번째 문자열에 접근하는것 까지 문제없이 가능함.
6. UTF-8과 같은 경우 그냥 char string이라고 생각하고 cout 출력하게 시킨 뒤,
콘솔이든 GUI든 그걸 받아먹는 놈이 알아서 UTF-8로 인코딩? 디코딩? 하길 빌어야함. cmd 라면 chcp 65001 쳐주면 되고.
7. 문자열 탐색도 복잡하게 생각할 것 없이 유니코드 단위로 딱딱 끊어서 비교하려하지 말고, 그냥 1바이트 단위로 끊어서 비교시키면 된다.
어차피 전체가 다 같야야만 일치한다고 판단할 테니까.
8. 결국 아스키든 유니코드든 0과1로 된 비트들의 집합이고 그걸 어떤 규칙에 따라 끊어서 해석하느냐의 차이일 뿐. 내가 끊어야 하는 상황이 아니면 그냥 무시해도 된다...
혹시 실무에서 쓰이는 방법이 있으면 알려주셈...
Utf16의 경우 1바이트 객체, 2바이트 객체, 4바이트 객체를 따로 만들어서 들어갈 수 있는 객체에한 글자씩 집어넣음 그리고 업캐스팅해서 3종류의 객체들을 하나의 배열에 집어넣음
와 씨 이것도 쩌는 방식이네... 이러면 객체 통해서 한글자씩 뽑을 수 있네 - dc App