최신 글
7
제목 게시일
22

[C++] string타입 문자열을 split하기

profile
코우
2021-07-22 18:29
조회 수 : 35917

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

따라서 이번 포스팅에서는 C++에서 자바의 split함수와 같은 결과를 얻을 수 있는 방법을 소개한다.

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

reference
istringstream는 istream을 상속받기 때문에 getline함수를 사용할 수 있다. 
  • getline 함수 : istream& getline(istream& is, string& str, char delim);
getline함수를 이용하여 구분자별로 잘라서 vector에 담아 반환하는 split함수를 구현해보았다.
 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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";
    }
}
cs


실행 결과  

reference

이 밖에도 find와 substr을 이용하여 절삭하는 방법도 있으니 편한 방법을 사용하면 될 것 같다.

참고 : https://www.cplusplus.com/reference/sstream/istringstream/

share
twitter facebook kakao naver
댓글