오늘 문자열 탐색 알고리즘  조지고 트리구조 클래스 써가면서 재밌게 할라 했는데


ㅄ같은 과거의 내가 "ㅎㅎ 책대로 영어만 쓰면 하는 의미가 없으니 유니코드로 문자열 탐색알고리즘 써야지"


라고 생각해서 별의 별 ㅈㄹ을 다해봄


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로 된 비트들의 집합이고 그걸 어떤 규칙에 따라 끊어서 해석하느냐의 차이일 뿐. 내가 끊어야 하는 상황이 아니면 그냥 무시해도 된다...



혹시 실무에서 쓰이는 방법이 있으면 알려주셈...