주로 프로그래머스에서 문제를 풀다보면 BOJ와 다르게 입력을 따로 받는 것이 아니라 주어질 입력들이 vector에 담겨져 있어서 이것을 split해야 하는 경우가 많다.
매번 문제를 접할 때마다 찾아보고 하는게 지겨워서 이번 기회에 기록하려고 한다.
Dash
에서 레퍼런스를 검색해봤다. ios관련 헤더들을 상속받고 있음을 알 수 있었다.
그럼 예제를 한 번 살펴보자.
다음과 같은 string 문자열로 이루어진 vector가 있다고 가정해보자
vector<string> vec = {"A 1", "B 2", "C 3"};
앞의 문자를 key로 뒤의 숫자를 value로 가지게끔 map 자료구조로 저장하고 싶다면 다음과 같이 코드를 작성하면 된다.
map<string, int> mp;
for(string s : vec) {
string key;
int val;
stringstream ss(s);
ss << key << val;
mp[key] = val;
}
다음과 같이 작성할 수도 있다.
for(string s : vec) {
string key;
int val;
stringstream ss(s);
while(getline(ss, key, ' ') && ss >> val) {
mp[key] = val;
}
}
// 출력내용
A 1
B 2
C 3
문자열을 공백을 기준으로 분리하기 위해 stringstream
을 사용한다.
우선 객체 ss
에 문자열을 초기화 한다.
stringstream ss(s);
getline(ss, key, ',')
은 ss
에서 쉼표를 기준으로 문자열을 자르고, key
에 저장한다. ss >> value
는 ss
에서 다음 정수를 읽고, val
에 저장한다.
while(getline(ss, key, ' ') && ss >> val)
string str = "A,B,C";
A, B, C를 각각 배열에 따로 저장하려면 다음과 같이 코드를 작성한다.
stringstream ss(str);
string token;
vector<string>tokens;
while(getline(ss, token, ',')) {
tokens.push_back(token);
}
// 출력내용
A
B
C