본문 바로가기

C++

(C++) - Split 함수 사용하기

반응형

Python, javascript 등 다양한 언어에서는 split함수를 지원하지만 c++에는 기본으로 split함수가 내장되어 있지 않습니다. 따라서 여기에 문자열 파싱에 있어 자주 사용하는 split함수의 예제를 정리합니다.

 

Header

#include <sstream>

string과 stream이 합쳐진 sstream을 이용하기 위해 선언해줘야하는 헤더입니다.

Code

stringstream 객체는 str() 함수 또는 <<(ostream : 삽입연산자)를 사용해 문자열을 집어넣습니다.

추출을 위해서는 >>(istream : 추출연산자)를 사용하거나 eof를 이용, getline함수를 이용하는 방법이 있습니다.

 

#include <sstream>
#include <iostream>
using namespace std;

int main(){
    stringstream ss;
    string n;
    ss.str("Hello beautiful world in the universe ! ! ");
    ss << "HI " << "HO";
    while(ss >> n) cout << n << endl;
}

 

출력결과

 

 이를 이용해 split함수를 만들어 보면 다음과 같습니다. 공백이 포함된 문자열을 첫 번째 인자로 입력 받고 두 번째  인자로는 구분자(한 문자)를 입력받습니다. vector<string>형으로 반환해줍니다.

 

#include <sstream>
#include <iostream>
#include <vector>
using namespace std;

vector<string> split(string input, char delimiter) {
    vector<string> result;
    stringstream ss(input);
    string tmp;
 
    while (getline(ss, temp, delimiter)) result.push_back(tmp);
 
    return result;
}

int main(){
    string str = "Hello beautiful world in the universe ! ! ";
    vector <string> result = split(str, ' ');
    for(auto &r : result) cout << r << ' ';
}