stringstream 데이터 형식 간 변환 실현

stringstream 데이터 형식 간 변환 실현
발췌 하 다.http://blog.csdn.net/kunp/archive/2004/06/30/30541.aspx;string: cstr 에서 char * 형식의 변환 문제.(주의, string:: c str 는 const char * 형식 을 되 돌려 줍 니 다.
stringstream 대상 을 사용 하여 데이터 형식 간 의 변환 을 실현 합 니 다.
   많은 사람들 이 전통 적 인 C 라 이브 러 리 를 사용 하여 데이터 형식 간 의 전환 을 진행 합 니 다. 이 는 많은 문 제 를 일 으 킬 수 있 습 니 다. 이러한 변환 방법 에는 위험한 함정 이 많 기 때 문 입 니 다. 예 를 들 어 itoa () 라 는 함 수 는 표준 라 이브 러 리 에 존재 하지 않 습 니 다. 표준 라 이브 러 리 는 더욱 안전 하고 자동 적 이 며 직접적 이기 때 문 입 니 다.
   구체 적 인 범례 를 살 펴 보 겠 습 니 다. int 를 string 으로 바 꾸 고 싶다 고 가정 하 십시오. 이 목적 을 달성 하기 위해 서 는 다음 과 같은 절 차 를 따라 야 합 니 다.
1. stringstream 대상 을 만 들 고,
2. 조작 부호 < < int 데이터 삽입,
3. 연산 자 > > 앞 에 삽 입 된 데 이 터 를 string 대상 에 추출 합 니 다.
다음 코드 줄 은 이 절 차 를 보 여 줍 니 다.

																
       
        //   :teststream.cpp //  : int      stringstream    string 
        
#i nclude <iostream>
#i nclude <stdlib.h>    // system()
#i nclude <string>
#i nclude <sstream>
using namespace std;

																

int main(int argc, char *argv[])
{
    std::stringstream stream;
    std::string result;
    int num = 1000;
   
    stream << num;                          // int stream
    stream >> result;                       //
    cout << "num:\t" << num << endl;
    cout << "result:\t" << result << endl;    // "1000"               
   
    system("PAUSE"); 
    return 0;
}


   stringstream 변환 을 위해 간결 한 cast 작업 이나 모드 로 고 를 사용 하지 않 았 음 을 주의 하 십시오. 연산 자 < < < 와 > > 는 원본 데이터 의 형식 과 대상 데 이 터 를 자동 으로 삭제 하고 필요 한 변환 을 자동 으로 안전하게 수행 합 니 다.
라 이브 러 리 는 std: string 과 같은 높 은 수준의 작업 에 만 국한 되 지 않 습 니 다. char * 변수 간 의 전환 을 편리 하 게 실현 할 수 있 습 니 다.

												
       
        //   :teststream2.cpp //  : int      stringstream    char[] #i nclude <iostream> 
        
         
#i nclude <stdlib.h>    // system()
#i nclude <string>
#i nclude <sstream>
using namespace std;

												

int main(int argc, char *argv[])
{
    std::stringstream stream;
    char result[12] = {'\0'};
    stream << 1234;                     //insert int to stream
    stream >> result;                   //extract previously inserted value
    cout << result << endl;             // print "1234"            
   
    system("PAUSE"); 
    return 0;
}


   같은 stringstream 대상 을 사용 하여 다양한 유형의 변환 을 실현 하려 면 매번 변환 후 clear () 구성원 함 수 를 호출 해 야 합 니 다. 예 를 들 어:

												
       
        //   :teststream3.cpp //  :    stringstream            #i nclude <iostream> 
        
         
#i nclude <stdlib.h>    // system()
#i nclude <string>
#i nclude <sstream>
using namespace std;

												

int main(int argc, char *argv[])
{
    std::stringstream stream;
    int n, m;
    stream<< "456";       //insert string
    stream >> n;          //extract to int
    stream.clear();       //reset stream before another conversion
    stream<< true;        //insert bool value
    stream >> m;          //extract to int

    cout << "n:\t" << n << endl;    //print 456
    cout << "m:\t" << m << endl;    //print 1            
   
    system("PAUSE"); 
    return 0;
}


   사실 stream 대상 은 다양한 유형의 입력 을 받 을 수 있 는 특징 이 우리 에 게 좋 은 점 을 가 져 다 줄 수 있 습 니 다. int, char * 등 서로 다른 유형의 입력 을 동시에 stream 대상 에 가 져 온 다음 에 이 stream 대상 을 통 해 새로운 값 을 내 보 낼 수 있 습 니 다.

												
       
        //   :teststream4.cpp //  : int     char*    stringstream    char[] 
        
#i nclude <iostream>
#i nclude <stdlib.h>    // system()
#i nclude <string>
#i nclude <sstream>
using namespace std;

												

int main(int argc, char *argv[])
{
    std::stringstream stream;
    char ip[16];
    stream << 218; //insert int
    stream << "."; //insert string
    stream << 192; //insert int
    stream << "."; //insert string
    stream << 160; //insert int
    stream << "."; //insert string
    stream << 228; //insert int
   
    stream >> ip;

    cout << "ip:\t" << ip << endl;    //print " 218.192.160.228"    
    system("PAUSE"); 
    return 0;

좋은 웹페이지 즐겨찾기