본문 바로가기

BE/C++

[C++] stringstream 사용법

인트로 

안녕하세요. 오늘은 C++의 Stringstream 사용법에 대해 포스팅하겠습니다.

C++에서 여러가지 자료형이 한 줄에 들어오면 파싱해서 용도에 맞게 사용할 필요가 있는데요.

특히 "이름 날짜 내용"과 같은 문자열로 한 줄의 데이터로 들어오면 각각 이름, 날짜, 내용등으로 파싱해서 사용하기 위해 많이 활용됩니다. 그 때 stringstream이 굉장히 유용한 라이브러리입니다. 

 

1) 문자열을 나누는 stringstream

C++에서 stringstream은 주어진 문자열에서 필요한 자료형에 맞는 정보를 꺼낼 때 유용하게 사용됩니다.

stringstream에서 공백과 '\n'을 제외하고 문자열에서 맞는 자료형의 정보를 빼냅니다. 

˙ #include <sstream>  전처리 헤더를 필수로 포함해야 합니다. 

˙ stream.str(string str) 은 현재 stream의 값을 문자열 str로 바꿉니다. 

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

 

2) stringstream 초기화

stringstream은 stream.str(""); 구문을 통해 초기화합니다. 

int num;
string str = "123 456";
stringstream stream; 
stream.str(str);
while(stream1 >> num ) cout << num << endl;
stream.str("");//초기화

 

3) stringstream을 활용해 날짜를 초로 바꾸기 

stringstream을 통해 주어진 문자열을 알맞게 변형한 후, 초(second)로 변환하는 C++ 코드입니다.

#include <iostream>
#include <sstream>
#include <string>
#include <vector> 
using namespace std;
int main(void){
	
	vector<long long> time;
	string str = "2019:06:30 12:00:30";//연 월 일 시 분 초  
	for(int i=0;i<str.size();i++){
		if(str[i] == ':') 
		str[i] = ' ';
	}
	
	long long num  = 0;
	stringstream stream;
	stream.str(str);
	while(stream >> num){
		time.push_back(num);
	}
	
	long long second = 0;
	second  += time[0] * 365 *  24 * 60 * 60;//연 
	second += time[1] * 30 * 24 * 60 * 60;//월 
	second += time[2] * 24 * 60 * 60;//일 
	second += time[3] * 60 * 60;//시 
	second += time[4] * 60;//분 
	second += time[5];//초 
	
	cout << second << endl; 
	return 0;
}