반응형
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. 참고사이트
반응형
'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 |