Java에서는 문자열을 특정 구분자를 이용하여 여러 부분으로 나누는 함수 split을 제공한다. 또한 C의 경우 strtok라는 함수를 이용하여 char배열 형태의 문자열을 구분자를 기준으로 나눌 수 있다. 그러나 strtok의 경우 string타입의 문자열은 지원하지 않는다.
따라서 이번 포스팅에서는 C++에서 자바의 split함수와 같은 결과를 얻을 수 있는 방법을 소개한다.
C++에서는 istringstream이라는 문자열에서 작동하는 스트림 클래스가 있다. 이는 sstream이라는 C++ 표준 라이브러리를 추가해주어야 사용가능하다.
istringstream는 istream을 상속받기 때문에 getline함수를 사용할 수 있다.
따라서 이번 포스팅에서는 C++에서 자바의 split함수와 같은 결과를 얻을 수 있는 방법을 소개한다.
C++에서는 istringstream이라는 문자열에서 작동하는 스트림 클래스가 있다. 이는 sstream이라는 C++ 표준 라이브러리를 추가해주어야 사용가능하다.
istringstream는 istream을 상속받기 때문에 getline함수를 사용할 수 있다.
- getline 함수 : istream& getline(istream& is, string& str, char delim);
소스코드
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 |
실행 결과
이 밖에도 find와 substr을 이용하여 절삭하는 방법도 있으니 편한 방법을 사용하면 될 것 같다.
참고 : https://www.cplusplus.com/reference/sstream/istringstream/
댓글