[C++] Split 구현과 stringstream, getline

강한·2024년 4월 9일

CPP

목록 보기
3/18
post-thumbnail

C++을 사용해서 알고리즘 문제를 처음 풀 때 문자열 나누기 같은 문제가 많았다. 자바를 배웠던 나는 당연히 split을 사용해서 나눠버리려고 했는데 없는듯했다. 찾아보니 split을 애초에 구현을 했어야 했고 stringstream과 getline이 이해가 안 됐다.

stringstream

  • 문자열에서 동작하는 스트림 클래스
  • iostream을 상속받는 클래스
  • string과 stream의 성격을 가짐
  • 해당 변수 자료형으로 읽을 수 없는 문자열이 나올 때까지 읽음
  • 화이트 스페이스를 구분해서 읽음

getline

  • 입력 가능한 최대 문자 수를 지정하지 않아도 됨
  • 지정한 delimiter를 만나기 전까지 모든 문자를 읽어 string 객체에 저장함

int형인 num으로 읽었을 경우

출력 결과

string형인 s로 읽었을 경우

출력 결과

string형으로 읽었을 때 abc와 ab만 나올 줄 알았는데 숫자도 모두 string형으로 읽었기 때문에 모두 출력됐다.

Split 구현

#include <string>
#include <sstream>

using namespace std;

vector<string> split(string str, char delimiter);

vector<string> split(string input, char delimiter) {
	vector<string> answer;
	stringstream ss(input);
	string temp;

	while (getline(ss, temp, delimiter)) {
	    answer.push_back(temp);
	}

	return answer;
}

while 문으로 구분 값인 delimiter 전까지의 문자열을 넣어주고 temp 변수에 잘라서 넣어주고 answer 벡터에 넣어준다.
잘라진 문자열이 담긴 벡터를 리턴해준다.

profile
의지 강한 게임개발자

0개의 댓글