본문 바로가기
PROBLEM SOLVING

[C++] string 타입 문자열 split

by 개발자 구리 2022. 1. 17.

구분자를 기준으로 문자열을 나누는 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