-
C#, Java, JavaScript에 있는 문자열 자르기 함수인 split()이 C++에는 없습니다. 필요하면 만들어 써야 합니다. 막상 급하게 필요할 때 문자열 함수가 익숙하지 않다면 생각보다 오래 걸릴 수 있습니다. 미리 만들어서 사용합시다.
split()
vector<string> split(string s, string delim) { size_t off = 0; vector<string> result; while (true) { size_t pos = s.find(delim, off); size_t count = pos - off; string str = s.substr(off, count); result.push_back(str); off += count + 1; if (0 == off) break; } return result; }
"ABC DEF HIJ" 문자열을 자른다고 하면 공백의 위치를 find() 함수로 찾아서 진행하는 합니다. 마지막 HIJ는 공백이 없기 때문에 find()의 반환값은 -1입니다. size_t는 unsigned long long이기 때문에 어마어마하게 큰 숫자가 나옵니다. 어쨌든 -1인데 마지막에 off 값을 갱신해주는 곳을 보면 마지막에는 무조건 off가 0이 됩니다. count는 pos - off이므로 코드를 풀어 쓰면 off = pos - off + off + 1입니다. pos가 -1이기 때문에 off가 0이 됩니다. 엉뚱한 구분자를 넣어도 원본 문자열 하나만 들어있는 문자열 벡터가 반환이 됩니다.
'개발 > C·C++' 카테고리의 다른 글
스마트 포인터 (0) 2021.09.19 스레드 함수를 람다식 안에서 사용할 때 주의할 점 (0) 2021.09.15 생산자/소비자 패턴에서의 WaitForSingleObject() (0) 2021.09.01 sleep_for(), yield() (0) 2021.09.01 비주얼 스튜디오에서 다른 프로젝트의 파일 참조하기 (0) 2021.08.31