No Rules Rules

다수 delimiter를 이용한 STL string tokenizer (feat. template) 본문

언어/C++

다수 delimiter를 이용한 STL string tokenizer (feat. template)

개발하는 완두콩 2022. 8. 31. 22:10
728x90
반응형

STL의 string을 다루다보면 특정 구분자를 통해 파싱이 필요한 경우가 있습니다.

필요할때마다 구글링을 해보면 하나의 구분자를 통해 파싱하는 경우가 많다보니 한번에 다수의 구분자를 통해 파싱을 하는 함수를 직접 구현하여 두고두고 쓰고자 정리합니다.

 

반응형

 

template <typename T> void stringtok(T& container, const std::string& in, const char* const delimiters = " \t\n")
{
	std::size_t len = in.length(), i = 0, j = 0;
	while (i < len) {
		if ((i = in.find_first_not_of(delimiters, i)) == std::string::npos)
			break;
		if ((j = in.find_first_of(delimiters, i)) == std::string::npos) {
			container.push_back(in.substr(i));
			break;
		}
		else {
			container.push_back(in.substr(i, j - i));
		}
		// next
		i = j + 1;
	}
}
  • container : 파싱된 문자열을 담기 위한 template. vector<string> 또는 list<string> 자료형
  • in : 파싱할 전체 문자열
  • delimiters : 파싱할 구분자들. 기본값은 띄워쓰기, 탭, 개행문자 로 입력
728x90
반응형
Comments