본문 바로가기
공부하다 생긴 의문

[C++] stringstream 사용법

by 재능없는 컴과생 2024. 9. 30.

프로그래머스 '이중우선순위큐' 문제를 풀면서 이런 문제는 Python list의 split 함수를 이용하면 편리하게 풀 수 있을 것 같은데, C++ 에서는 하나하나 파싱을 해줘야 하는것이 굉장히 번거롭다고 생각해서 찾아본 것이 stringstream이다.

stringstream은 문자열에 포함된 공백과 개행문자(\n)을 제외한 다른 문자열들을 자동으로 파싱해준다.

이를 이용하기 위해 #include <sstream>을 꼭 선언해주어야 한다.

 

int num;
string str = "123 456";
stringstream stream; 
stream.str(str);
while(stream >> num ) cout << num << endl;

 

간단한 사용법은 먼저 사용할 문자열과 stringstream을 선언해 주는 것이다.

stringstream을 선언해 준 후, 파싱하려는 문자열을 stringstream에 오버라이딩된 str 메서드를 이용해 지정해준다. 이렇게 되면 stringstream 안에는 자동으로 공백과 개행문자가 없어진, 즉 Python에서 split을 이용한 형태의 문자열을 하나씩 저장하고 있다. 우리는 이를 >> 를 이용해 하나씩 불러오면 된다. 그리고 위의 예제에서와 같이 형변환을 알아서 해주기 때문에 만일, 파싱하려는 문자열이 int형이라면, stringstream을 통해 stoi와 같은 함수를 이용할 필요 없이 그냥 받아서 써도 되지만... 나같은 경우는 그냥 stoi를 쓰고 있다.

 

실제로 코딩테스트에서 활용하는 경우는 적겠지만

C++을 이용하는 프로젝트나, 데이터를 파싱해야 하는 경우에는 많이 쓰일것 같다.