문자열을 나누는 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;
}