반응형
"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;
}
결과)
'C,C++ > C++' 카테고리의 다른 글
[C++] std::thread 기본 활용 방법을 알아보자 | mutex, condition_variable, 종료 방법 (2) | 2020.07.03 |
---|---|
[C++] std::thread 생성에 대해 알아보자 (0) | 2020.06.26 |
[C/C++] realloc 함수 사용 시 주의할 점 (0) | 2020.04.09 |
[C/C++] malloc과 new의 차이와 동작 원리 (0) | 2020.04.07 |
[C++] 스마트 포인터에 대해 알아보자(3) | 약한 포인터 | std::weak_ptr (0) | 2020.03.21 |
댓글