컴퓨터 프로그래밍 공부/자료구조와 알고리즘

#include <sstream>

게임 개발 2023. 2. 14. 09:27

1. istringstream과 ostringstream과 stringstream 은 무엇인가?

 

문자열을 다룰 때 유용하게 사용 가능한 Class이다.

1) istringstream

- 문자열 포맷을 parsing 할 때 사용한다.

2) ostringstream

- 문자열 format을 조합하여 저장할 때 사용합니다.

3) sstringstream

- 문자열에서 내가 원하는 자료형의 데이터를 추출할 때 사용한다.

 

2. 헤더 정보

 

#include <sstream>를 include 하면 사용 가능하다.

 

 

3. 기본 사용법

 

1) istringstream로 문자열 format을 분해하기

- 다음 예제에서 space 또는 tap으로 구분된 "test 123 123 hah ahha" 를 각 변수에

알맞게 넣은 예제이다.

 

#include<iostream>
#include<sstream>

int main(void)
{
	std::istringtream iss("test 123 123hah ahha");
    std::string str, str1, str2;
    
    int inta;
    
    std::cout << iss.str() << std::endl;
    iss >> str >> str1 >> str2 >> inta;
    std::cout << "str : " << str << std::endl;
    std::cout << "str1 : " << str1 << std::endl;
    std::cout << "Str2 : " << str2 << std::endl;
    std::cout << "inta : " << inta << std::endl;
    
}

 

2) ostringstream로 문자열 format으로 문자열 생성하여 저장

 

#include <iostream>
#include <sstream>

int main()
{
	std::stringstream oss;
    int inta = 10;
    std::string str = "test_string";
    
    oss << "test" << inta << str << std::endl;
    
    std<<cout<<oss.str();
}

 

3) stringtream로 문자열 저장 후 parsing 하기

 

(1) stringstream에 문자열 넣는 방법 1 (문자열로 입력)

(2) stringstream에 문자열 넣는 방법 2 (문자열 format 사용하여 입력)

 

#include<iostream>
#include<sstream>

int main()
{
	//stringstream에 문자열 넣는 방법 1 (문자열로 입력)
    std::stringstream ss1("test 1 2 3 4 5");
    std::string str;
    
    // while(ss1 >> str)이란, 더 이상 str의 자료형에 맞는 정보가 없을 때까지
    // 계속 스트림에서 str으로 자료를 추출/복사하는 것이다. 끝에 도달하면 끝난다.
    
    while(ss1>>str)
    {
    	std::cout << str << std::endl;
    }
    
    
    // stringstream에 문자열 넣는 방법 2 (문자열 fomat 사용하여 입력)
    std::stringstream ss2;
    ss2 << "1" << '' << -1 << '' << 2 << 3;
    
    while (ss2 >> str)
    {
    	std::cout << str << std::endl;
    }
    
    return 0;
}

 

 

4. 응용 사용법

 

1)ostringstream 재사용 초기화

 

#include <iostream>
#include <sstream>

int main()
{
	std::ostringstream oss;
    
    oss << "test 1";
    oss.dear();
    oss.str("");
    oss << "test 2";
    
    return 0;
}