본문 바로가기

Information Technology/C++

[C++] 문자열 스트림

이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요 ;)


이번 포스팅에서는 sstream. 즉, 문자열 스트림에 대해 알아보겠습니다.

#include <iostream>
#include <sstream>
using namespace std;

우선 sstream을 사용하기 위해선 헤더에 iostream 외에 sstream을 추가해줘야 합니다.

sstream이란 string stream의 약자로, 문자열을 출력하기 전에 임시로 문자열을 저장해두는 장소라고 생각하면 될 것 같습니다.

int main()
{
	stringstream os;	// 임시 저장소 os 생성

	int i = 12345;
	double d = 67.89;

	os << i << d;		// os에 i와 d를 저장

	string str1;		// string 자료형 변수 str1 생성
	string str2;		// string 자료형 변수 str2 생성

	os >> str1 >> str2;	// os에 저장된 i와 d를 str1과 str2에 차례로 저장
	cout << str1 << endl;
	cout << str2;
}

예제 코드는 위와 같습니다.

우선 stringstream 자료형 변수 os를 저장합니다. os는 문자열이 출력되기 전에 임시로 저장되는 저장소입니다.

그리고 int형 변수 i와 double형 변수 d를 각각 초기화합니다.

그다음으로 stringstream 자료형 변수 os에 i와 d를 저장합니다.

이 os의 사용법은 마치 cout의 사용과 유사합니다. 여기서 << 기호의 의미는, << 뒤에 있는 변수 혹은 값들이 화살표의 방향을 따라 os로 흘러들어 간다는(stream) 의미입니다. 우리가 cout을 사용해서 문자열을 출력하는 것도, << 뒤에 있는 값들이 cout에 흘러들어 가고 cout을 통해 출력을 하는 구조입니다.

다음으로는 string 자료형 변수 str1과 str2를 각각 초기화합니다.

그리고 이번에는 os에 저장된 i와 d의 값을 str1과 str2로 흘려보내 줍니다.

여기서 등장하는 >> 기호는 우리가 그동안 cin을 통해 값을 변수에 저장할 때 사용하던 기호입니다. >> 기호는 그러니까, 스트림에 저장된 값을 >> 뒤에 나오는 변수에 흘려보내 줘 저장을 시키는 기호이자 기능입니다.

자 그럼, os에 저장된 값을 str1과 str2에 흘려보내 줬으니 str1과 str2에 어떤 값이 저장됐는지 출력을 통해 알아보겠습니다.

이게 출력된 결과 값입니다. 어 그런데 str1과 str2에 i와 d가 사이좋게 하나씩 저장된 게 아니라, str1에 i와 d가 모두 저장되어있습니다. 이게 어떻게 된 일일까요? 그건 string 자료형이 문자열을 공백 전까지 읽기 때문입니다. 다르게 말하면 공백을 읽지 못하기 때문입니다. 우리는 os에 str1과 str2를 저장할 때 중간에 공백 없이 str1과 str2를 그대로 입력했습니다.

	os << i << " " << d;

때문에 os에 i와 d 사이에 공백을 둬서 저장하게 되면

위와 같이 str1과 str2에 i와 d가 각각 저장되는 걸 볼 수 있습니다.


이번에는 stringstream을 비우는 방법을 알아보겠습니다.

int main()
{
	stringstream os;

	int i = 12345;
	double d = 67.89;

	os << i << " " << d;

	os.str("");		// os.str()을 이용해 버퍼를 빈칸으로 덮음
	cout << os.str() << endl;
}

방법은 위와 같이 os.str을 통해 버퍼를 빈칸("")으로 덮어버리는 것입니다.

그리고 os.str()을 통해 os에 저장된 값을 출력하면 빈칸으로 덮여 아무 값도 출력되지 않는 걸 확인할 수 있습니다.

참고로 os.str()이란 os에 저장된 string 문자열을 통째로 가져오는 기능입니다.

'Information Technology > C++' 카테고리의 다른 글

[C++] 파일 입출력  (0) 2019.12.27
[C++] 정규 표현식  (0) 2019.12.27
[C++] ostream으로 출력하기  (0) 2019.12.24
[C++] istream으로 입력받기  (0) 2019.12.23
[C++] string 대입, 교환, 덧붙이기, 삽입  (0) 2019.12.23