2024
11.25

C#에서는 string에서 split 멤버함수가 제공되어 손쉽게 자를 수 있었다.

그러나 C++에서는 split 함수가 존재하지 않는다.

 

문자열을 주어진 문자 delimiter로 자르는 데에 여러 방법이 있지만,

가장 간단한 방법은 std::stringstream을 사용하는 방법.

 

std::stringstream

<sstream> 헤더에 존재하는 std::stringstream은 여러 문자열을 이어 붙이는 기능도 있지만

문자열을 주어진 delimiter대로 자르는 기능도 제공한다.

 

<string> 헤더의 std::getline을 사용하여 문자열을 자를 수 있다.

bool 리턴값으로 문자열 존재여부를 알 수 있으니 while문과 같이 사용하자.

 

첫 번째 인자로 streamstream 객체

두 번째 인자로 문자를 담을 임시 string

세 번째 인자로 자를 문자의 delimiter

#include <iostream>
#include <sstream>
#include <vector>
#include <string>

std::vector<std::string> split(const std::string& str, char delimiter) {
    std::vector<std::string> splited;
    std::stringstream ss(str);
    std::string temp;

    while (std::getline(ss, temp, delimiter)) {
        splited.push_back(temp);
    }
    return splited;
}

 

stringstream은 >> 연산자를 사용해서 getline을 바로 사용할 수 또 있다.

이 경우에는 delimiter 가 기본적으로 공백으로 사용된다. (스페이스, 탭, 줄 바꿈)

다른 문자로 바꿀 수 없으며, 바꾸고 싶다면 std::getline을 사용해야만한다.

while (ss >> temp)
{
    answer.push_back(temp);
}

 

int형 또는 char 형으로 받을 수 있다.

string binomial = "35 + 34";
int a,b;
char op;

stringstream ss;
ss.str(binomial);
ss >> a >> op >> b;

 

참고! getline은 cin과도 사용할 수 있다.

void Code::main()
{
    string temp;
    char delimiter = '\n';

    while (getline(cin, temp, delimiter))
    {
        cout << temp << '\n';
    }
}

 

COMMENT