Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 문자열 토큰화하는 방법 완벽 가이드

개요

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 함수를 활용하는 것이 좋습니다. 상황에 맞는 방법을 선택하여 효율적으로 문자열을 처리해 보세요.