구분자를 기준으로 문자열을 나누는 Java의 split 함수와 달리, C++에서는 기본적으로 제공하는 split 함수가 없다.
여러 개발 블로그를 참조해서 아래와같이 다양한 방법의 split이 가능하다는 것을 알았다.
숙지해두고 알고리즘 문제풀이시 활용해야겠다.
iostringstream과 getline을 이용하는 방법
C++ 표준 라이브러리인 sstream을 추가하면 istringstream이라는 문자열에서 작동하는 스트림 클래스를 사용할 수 있다.
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
int main() {
string str = "Hello,Programming,World";
istringstream ss(str);
string str_buf;
while(getline(ss, str_buf, ',')) // 구분자
{
cout << str_buf << " "; // split된 문자열이 str_buf에 저장된다.
}
return 0;
}
출력 결과 : Hello Programming World
string의 find를 이용하는 방법
find는 string에서 주어진 문자열을 찾을때 사용 가능한 함수이다.
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
int main() {
string str = "Hello,Programming,World";
size_t prev = 0, cur;
cur = str.find(','); // 구분자
while(cur != string:npos) // find는 원하는 문자열을 찾지 못하면 npos를 반환한다.
{
string sub_str = str.substr(prev, cur - prev); // 문자열 split
cout << sub_str << " ";
prev = cur + 1;
cur = str.find(',', prev); // prev부터 구분자가 나오는 지점을 찾는다
}
cout << str.substr(prev, cur - prev) << " "; // 마지막 split
}
출력 결과 : Hello Programming World