[C++] stringstream 사용법(feat. stream과 버퍼란 무엇인가?)
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