반응형

stringstream 사용법

 

INTRO

C++ 에서는 여러가지 자료형이 string으로 한 줄에 들어오면 이것을 어떤 식으로 해야할지 

고민하다가 stringstream 을 찾았는데,  한 줄에 들어오면 파싱해서 용도에 맞게 사용할 수 있었습니다.

그런 경우에 stringstream이 엄청나게 유용하게 사용할 수 있습니다.

 

1. stringstream 이란?

문자열에서 작동하는 스트림 클래스 입니다.

이 클래스 객체는 일련의 문자를 포함하는 문자열 버퍼를 사용하고 있습니다.

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

 

2. 헤더 정보

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

 

3. 기본 사용법
string str1 = "1D2S#10S";
string str2 = "1111DAWV2S#10S";
stringstream ss1(str1);
stringstream ss2(str2);
int num1, num2;

while (ss1 >> num1) cout << num1 << endl;
while (ss2 >> num2) cout << num2 << endl;

이런식으로 출력을 한다면 결과는 어떻게 나올까요?

1 1111
string str1 = "1D2S#10S";
string str2 = "1111DAWV2S#10S";

그러면 char형으로 한번 받아보겠습니다.

string str1 = "1D2S#10S";
string str2 = "1111DAWV2S#10S";
stringstream ss1(str1);
stringstream ss2(str2);
char ch1, ch2;

while (ss1 >> ch1) cout << ch1 << " ";
while (ss2 >> ch2) cout << ch2 << " ";
1 D 2 S # 1 0 S
1 1 1 1 D A W V 2 S # 1 0 S

이번에는 str1, str2에 들어가 있는 모든 것들이 출력되었습니다.

예제를 통해 보면 알겠지만, 처음 int형으로 받게 되면 숫자로 되어있는부분을 받아옵니다.

하지만, string은 char형으로 이루어져 있기 때문에 모든 문자열을 받아올 수 있습니다.

string str1 = "1D2S#10S";
stringstream ss1(str1);

cout << ss1.get() << " ";
cout << ss1.get() << " ";
cout << ss1.get() << " ";
cout << ss1.get() << " ";
cout << ss1.get() << " ";
ss1.unget();
cout << ss1.get() << " ";
return;
49 68 50 83 35 35

- get() : 커서를 하나씩 옮기면서 값을 반환합니다.

 

- unget() : 커서를 앞으로 다시 옮깁니다.

 

그래서 보시면 아스키코드로 나오는데, 마지막에 unget()을 사용하고

 

다시 get()으로 받아온 값을 출력해보니, 그 전과 값이 똑같습니다.

 

stringstream 을 잘 사용하면 엄청 유용한 기능이 될 것 같습니다.

4. 참고사이트

http://www.cplusplus.com/reference/sstream/stringstream/

반응형

'C, C++' 카테고리의 다른 글

[C/C++]스마트 포인터(smart pointer)  (0) 2021.11.22
[C/C++] accumulate 사용법과 주의사항  (0) 2021.07.09
[C/C++]enum과 enum class  (0) 2021.04.05
[C/C++] 다형성 - 가상 함수  (0) 2020.09.10
메모리의 구조  (0) 2020.09.10

+ Recent posts