Algorithm

[C++] stringstream 사용법(feat. stream과 버퍼란 무엇인가?)

용성군 2021. 12. 31. 00:39
728x90
반응형

C++에서 문자열을 공백과 \n 을 기준으로 int형 string형 float형 등 다양하게 자를 수 있도록 하는 stringstream이 존재한다.
이것을 어떻게 쓰는지 알아보도록 하자. stringstream을 설명하기 전에 stream은 무엇인지 알아보도록 하겠다.

스트림(stream)

C++ 프로그램은 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림(stream)을 통해 다룬다.
스트림(stream)이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미한다.
즉, 스트림은 운영체제가 입력과 출력을 다루기 위해 가상으로 만들어 준 것으로 중간 역할을 한다.

버퍼(buffer)

스트림은 내부에 버퍼(buffer)라는 임시 메모리 공간을 가진다.
버퍼를 이용하면 프로그램의 입출력을 효율적으로 처리할 수 있다.


버퍼의 장점
1. 문자를 하나씩 전달하는 것이 아닌 묶어서 한 번에 전달하므로, 전송 시간이 적게 걸려 성능이 향상된다.
2. 사용자가 문자를 잘못 입력했을 경우 수정을 할 수가 있다.

버퍼의 단점
1. 빠르게 반응해야하는 프로그램을 수행할 때에는 키보드에서 프로그램으로 바로 전달되어야 한다.

참고 링크
https://tcpschool.com/cpp/cpp_io_streamBuffer

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

 

 

 

 

tcpschool.com


반응형

stringstream 이란?

문자열에서 동작하는 스트림 클래스이다.(즉 외부에서 입력과 출력으로 받는 것이 아니라 string type을 받아 동작한다.)
문자열에서 내가 원하는 자료형의 데이터를 추출할 때 사용한다.
#include<sstream>을 선언하고 사용해야한다.

String에서 Int형 뽑아내는 예시

#include <string> 
#include <sstream> 
#include <iostream> 
using namespace std; 
int main() 
{ 
    int num; 
    string str = "123 456\n789 012"; 
    stringstream stream; 
    stream.str(str);//초기화 ->stream에 str을 대입. 
    while(stream >> num)
    { //뽑아내고자 하는 int형 값을 출력한다. (num이 int형이기 때문에) 공백이나 \n이 나올때 까지 읽어드린 후 출력 
        cout << num << endl; 
    } 
} 
//출력 //123 //456 //789 //12

String에서 공백을 기준으로 string 뽑아내는 예시

#include <string> 
#include <sstream> 
#include <iostream> 
using namespace std; 
int main() 
{ 
    string s; 
    string str = "hello world!\nhell world"; 
    stringstream stream(str);//초기화 ->stream에 str을 대입. 
    while(stream >> s)
    { //뽑아내고자 하는 string type을 출력한다.(s가 string type이기 때문에) 공백이나 \n이 나올때 까지 읽어드린 후 출력 
        cout<<s<<endl; 
    } 
} 
//출력 : //hello //world! //hell //world

 

728x90
반응형