C++은 STL에서 split이 지원되지 않기 때문에 문자열을 자를 때 직접 구현해서 사용해야 한다.
#include <bits/stdc++.h>
using namespace std;
vector<string> split(string str, string delimiter){
vector<string> ret;
long long pos = 0;
string token;
while((pos = str.find(delimiter)) != string::npos){
token = str.substr(0, pos);
ret.push_back(token);
str.erase(0, pos + delimiter.length());
}
ret.push_back(str);
return ret;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
string s = "안녕하세요? 공백을 기준으로 스플릿 합니다.";
vector<string> splitStr = split(s, " ");
for(auto i : splitStr){
cout << i << "\n";
}
return 0;
}
문자열과 구분자를 파라미터로 받는 함수 split을 만들어주었다.
split 함수 리턴값이 벡터이므로 벡터에 받아서 반복문 돌려주면 된다.
자바스크립트는 split이 있긴 하지만 JS로도 반쪽짜리ㅋㅋㅋ split을 만들어보았다.
const split = (str, delimiter) => {
let pos;
let token;
const ret = [];
pos = str.indexOf(delimiter);
while(pos !== -1){
token = str.slice(0, pos);
str = str.slice(pos + 1);
ret.push(token);
pos = str.indexOf(delimiter);
}
str = str.slice(pos + 1);
ret.push(str);
return ret;
}
console.log(split('공백 문자를 기준으로, 자를래요', ' '));
// ["공백", "문자를", "기준으로", "자를래요"]
위에 작성한 split 함수는 반쪽짜리 구현이라 ,
나 공백
과 같은 하나 짜리를 기준으로 자르는 함수다. ,,
를 두개 사용한다거나 하면 의도한 예상 결과와 다르게 나온다. pos + 1 때문에 그렇다.
'' 를 넣으면 무한루프
걸리는 문제가 있다. ㅋㅋㅋ JS에 내장 메서드가 있어서 참 다행이다 싶다.