공부하자/C++

[C++]C++에서 split() 함수 구현하기

하이가든 2024. 4. 10. 21:37

 

문자열을 나누는 split함수 구현하기

#split() 구현하기

 

-C++에서는 STL에서 split() 함수를 지원하지 않는다. 코딩테스트에는 문자열을 기준에 따라 쪼개는(split) 로직이 자주 등장하는데 때문에 C++에서는 직접 split함수를 구현해야 한다. 구현은 아래와 같이 한다.

 

- 기본적인 문자열을 가공하는 함수들을 사용하지만 string::npos를 이용하여 while문을 돌리는 구문이 핵심이라고 할 수 있다.

#include <bits/stdc++.h>
using namespace std;

vector<string> split(string input, string delimiter){//input: 입력문자열, delimiter: 구분자
	vector<string> ret; //빈 벡터 생성
	long long pos = 0; //구분자의 위치를 저장할 변수선언
	string token = ""; //split으로 쪼개진 문자열을 담을 변수 선언
	while((pos = input.find(delimiter)) !=  string::npos){
    //문자열 앞에서부터 delimiter를 찾는다.
    //못 찾을 때까지 루프가 반복
		token = input.substr(0,pos); //delimiter 이전의 문자열을 토큰변수에 초기화
		ret.push_back(token);//벡터에 토큰을 삽입
		input.erase(0, pos + delimiter.length()); //토큰과 구분자의 길이만큼을 문자열에서 제거
	}
	ret.push_back(input);//delimiter 탐색이 끝난 후 남은 문자열을 벡터에 삽입
	return ret;//벡터를 반환
}

int main(){
	string str = "안녕하세요 Highgarden입니다 반갑습니다.", d = " ";
	vector<string> a  =  split(str, d);
	for(string b : a) cout << b << "\n"; 
	return 0;
}