본문 바로가기
C,C++/C++

특정 문자로 문자열 분리하기 | tokenizer

by woohyeon 2020. 6. 23.
반응형

"hello world" 또는 "hello, world" 라는 문자열이 있을 때 공백 또는 ','를 이용하여 단어 단위로 자를 수 있다. 이를 보통 token 단위로 나눈다 해서 tokenizing이라 한다.

여기선 getline() 함수와 stringstream 타입을 통해 간단하게 나누는 법을 알아본다. string 타입과 char* 타입 두 가지 모두 가능하다. stringstream 타입을 사용하기 위해 <sstream> 헤더파일을 인클루드 해줘야 한다.

아래는 두 문자열을 각각 공백과 콤마를 기준으로 분리하는 간단한 예제이다.

// string과 char* 타입 모두 가능
std::string str1 = "hello world";
const char* str2 = "hello, world";


// 문자열을 통해 stringstream 타입의 객체를 생성한다.
std::stringstream ss1(str1);
std::stringstream ss2(str2);
// std::stringstream ss3("another way"); // 문자열 리터럴도 가능


// 분리된 단어를 일시적으로 저장할 변수를 선언
string token1;
string token2;


// 세 번째 인자가 delimiter(구분자)이다.
// 문자만 가능하며 해당 문자를 기준으로 문자열을 분리한다.
// 그 결과는 두 번째 인자에 저장된다.
while (std::getline(ss1, token1, ' '))
{
	std::cout << token1 << std::endl;
}

cout << endl;

while (std::getline(ss2, token2, ','))
{
	std::cout << token2 << std::endl;
}

 

결과)

 




댓글