stringstream

Computer/C/C++ 2007. 8. 9. 22:17
재미있는 녀석을 발견했다.


stringstream 이라는 녀석...

출처: http://blog.empas.com/electr/19358611

1.요약

문자열을 스트림처럼 다룰 수 있습니다.
sprintf/wsprintf의 대용으로 사용할 수도 있고, 문자열에서 토큰을 꺼내오는 데도 사용할 수 있습니다.


2.본문

C++에서 표준 입출력을 나타내는 cin/cout을 사용해 보신 적이 있으실 겁니다. stringstream도 같은 인터페이스를 가지고 있습니다.
대신에 문자열을 상대로 입출력을 한다고 생각하시면 되죠.

예제를 우선 보시겠습니다.

----- stringstream을 사용한 예제 --------------------------

1 

2 

3    #include <sstream> 

4    #include <iostream> 

5     

6    int main(int argc, char* argv[]) 

7    { 

8        int n = 3571; 

9        char* p = "blue"; 

10     

11        std::stringstream s; 

12        s << " My favorite color is " << p << "nand my favorite number is " << n; 

13     

14        std::cout << "Sentence----------------------n"; 

15        std::cout << s.str() << std::endl; 

16     

17        std::cout << "nToken-------------------------n"; 

18     

19        while(1) 

20        { 

21            char c[100]; 

22     

23            s >> c; 

24            if( s.fail() ) 

25                break; 

26     

27            std::cout << c << "n"; 

28        } 

29     

30        std::cout.flush(); 

31     

32        return 0; 

33    } 

---- 실행 결과 -------------------------------------------------

Sentence---------------------
My favorite color is blue
and my favorite number is 357

Token------------------------
My
favorite
color
is
blue
and
my
favorite
number
is
3571

-- 예제 분석 -----------------------------------------------

3    #include <sstream> 
stringstream 은 sstream 헤더 파일에 정의되어 있습니다.

( 참고로 이번 예제에서는 using namespace std;를 사용하지 않았기 때문에 필요할 때마다 std::를 붙여주어야 합니다. 계속 보시죠)

----------------------------------------------------------

8        int n = 3571; 

9        char* p = "blue"; 

10     

지역 변수를 선언하고 있습니다.
n, p는 나중에 문자열에 집어넣으려고 만든 겁니다.

중요한 stringstream s를 선언하고 있습니다.

----------------------------------------------------------

12        s << " My favorite color is " << p << "nand my favorite number is " << n; 
이번 Tip에서의 첫번째 하이라이트 입니다. MFC의 CArchive를 쓰듯이 s에 문자열 및 숫자를 차곡차곡 넣고 있습니다.

----------------------------------------------------------

15        std::cout << s.str() << std::endl; 
넣었으면 전체 문자열을 얻을 수도 있어야 겠지요.
stringstream::str() 은 string 을 반환합니다.

string은 C++ Standard Library에서 문자열을 다루기 위해 추가된 템플릿 클래스 입니다. string 객체에서 c-style의 문자열을 얻고자 하신다면.

str.c_str(); 
처럼 하시면 됩니다. 필요하실 때 쓰세요.

----------------------------------------------------------

19        while(1) 

20        { 

21            char c[100]; 

22     

23            s >> c; 

24            if( s.fail() ) 

25                break; 

26     

27            std::cout << c << "n"; 

28        } 

문자열의 마지막까지 토큰을 뽑아내려고 while 문으로 루프를 돌리고 있습니다.

이번 Tip의 두 번째 하이라이트인 23 라인에서는

s >> c;
처럼 토큰을 뽑아내고 있습니다.

나머지 코드는 실패여부를 확인하고 화면에 찍어주는 역할을 하므로 설명은 생략하겠습니다.


3.예제



4.참고

The C++ Standard Library from scratch



- 2001.08.13 Smile Seo -

'Computer > C/C++' 카테고리의 다른 글

gdb 명령어 요약집  (0) 2007.09.20
#define을 통한 macro에서 #과 ##의 용법  (0) 2007.08.08
#pragma  (0) 2007.08.08
vprintf, vsprintf,... 가변 인수 함수.  (0) 2007.08.01
bitset 클래스  (0) 2007.07.02