프로그래밍 언어/C++

[C++] string 타입 문자열을 Split (분할)하기

ShovelingLife 2023. 12. 6. 13:27

Java에서는 문자열을 특정 구분자를 이용하여 여러 부분으로 나누는 함수 split을 제공한다. 또한 C의 경우 strtok라는 함수를 이용하여 char배열 형태의 문자열을 구분자를 기준으로 나눌 수 있다. 그러나 strtok의 경우 string타입의 문자열은 지원하지 않는다. 

C++에서는 istringstream이라는 문자열에서 작동하는 스트림 클래스가 있다.  이는 sstream이라는 C++ 표준 라이브러리를 추가해주어야 사용가능하다.


istringstream는 istream을 상속받기 때문에 getline함수를 사용할 수 있다. 

  • getline 함수 : istream& getline(istream& is, string& str, char delim);

getline함수를 이용하여 구분자별로 잘라서 vector에 담아 반환하는 split함수를 구현해보았다.

#include<iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
 
vector<string> split(string str, char Delimiter) {
    istringstream iss(str);             // istringstream에 str을 담는다.
    string buffer;                      // 구분자를 기준으로 절삭된 문자열이 담겨지는 버퍼
 
    vector<string> result;
 
    // istringstream은 istream을 상속받으므로 getline을 사용할 수 있다.
    while (getline(iss, buffer, Delimiter)) {
        result.push_back(buffer);               // 절삭된 문자열을 vector에 저장
    }
 
    return result;
}
 
int main() {
 
    string str="AAA,BBB,CCC,DDD,EEE,FFF,GGG";
 
    vector<string> result = split(str, ',');
 
    for (int i = 0; i < result.size(); i++) {
        cout << result[i] << "\n";
    }
}

 

[C++] string타입 문자열을 split하기 | Life & Coding (lifencoding.com)