프로그래머스 공백으로 구분하기 1 문제 바로가기

엥 C++는 split이 없다고?!

Java나 Python에는 분명히 split()가 있었는데, C++은 없다(…) 왜지? 굳이 필요 없다고 느낀건가? 해결법은 정규표현식(regex)을 이용하거나 아니면 stringstream을 이용하는 것! 개인적으로 iostream을 확장한 sstream이 더 직관적으로 이해가 잘 되어서 이쪽을 선호한다.

예를 들어보자. 사용자가 input으로 2 3 5을 입력한다고 해보자. 이를 a b c 변수에 담기 위해서는 다음과 같이 코드를 작성할 수 있다.

#include <iostream>

using namespace std;

cin >> a >> b >> c;

cout << "a: " << a << "b: " << b << "c: " << c;

sstream은 iostream의 작동 방식과 매우 유사하다. sstream을 선언하고 string을 제공하면 띄어쓰기에 따라서 구분해서 변수를 계속해서 담아주는 역할을 한다고 볼 수 있다.

#include <sstream>
#include <iostream>

using namespace std;

string word; // word라는 string 선언
string sentence = "I love you";
stringstream stream; // stringstream 선언

stream.str(sentence); // stream에 sentence을 먹여줌
while (stream >> word){ // stream이 word에 하나씩 먹임
    cout << word << endl; // 먹인 word에 대한 내부 코드 작동
}

sstream을 이용한 풀이

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

using namespace std;

vector<string> solution(string my_string) {
    vector<string> answer;
    string word;
    stringstream stream;
    
    stream.str(my_string);
    while (stream >> word){
        answer.push_back(word);
    }

    return answer;
}

References