엥 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;
}