split 구현하기 (C++)

REASON·2022년 11월 25일
0

STUDY

목록 보기
125/127

C++은 STL에서 split이 지원되지 않기 때문에 문자열을 자를 때 직접 구현해서 사용해야 한다.

C++ 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 함수 리턴값이 벡터이므로 벡터에 받아서 반복문 돌려주면 된다.

특정 구분자 하나를 기준으로 자르기 (JS)

자바스크립트는 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에 내장 메서드가 있어서 참 다행이다 싶다.

0개의 댓글