개요
C++에서 문자열을 토큰화(분리)하는 것은 텍스트 처리 작업에서 매우 자주 사용되는 기술입니다. 이 글에서는 대표적인 두 가지 방법을 예제 코드와 함께 소개합니다.
방법 1: stringstream 사용하기
첫 번째 방법은 stringstream을 사용하여 공백으로 구분된 단어를 하나씩 읽어오는 것입니다. 이 방법은 다소 제한적이지만, 적절한 검사 로직을 추가하면 대부분의 경우 충분히 유용하게 활용할 수 있습니다.
예제 코드
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main() {
string str("Hello from the dark side");
string tmp; // 반복 시마다 단어를 저장할 문자열
stringstream str_strm(str);
vector<string> words; // 단어를 담을 벡터 생성
while (str_strm >> tmp) {
// 여기서 tmp에 대한 적절한 검사 수행 (예: 빈 문자열 확인)
// 또한 !, ., ? 등의 기호 제거
// 마지막으로 벡터에 추가
words.push_back(tmp);
}
}방법 2: getline 함수로 커스텀 구분자 지정하기
또 다른 방법은 getline 함수를 사용하여 원하는 구분자(delimiter)를 직접 지정해 문자열을 분리하는 것입니다. 이 방식은 공백뿐만 아니라 쉼표, 세미콜론 등 다양한 구분자를 사용할 수 있어 더욱 유연합니다.
예제 코드
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main() {
std::stringstream str_strm("Hello from the dark side");
std::string tmp;
vector<string> words;
char delim = ' '; // 분리에 사용할 구분자 정의
while (std::getline(str_strm, tmp, delim)) {
// 여기서 tmp에 대한 적절한 검사 수행 (예: 빈 문자열 확인)
// 또한 !, ., ? 등의 기호 제거
// 마지막으로 벡터에 추가
words.push_back(tmp);
}
}마무리
두 방법 모두 간단하고 실용적입니다. 공백 기준으로만 문자열을 나누면 되는 경우에는 stringstream의 추출 연산자(>>)가 가장 간편하며, 특정 구분자가 필요하거나 더 세밀한 제어가 필요하다면 getline 함수를 활용하는 것이 좋습니다. 상황에 맞는 방법을 선택하여 효율적으로 문자열을 처리해 보세요.