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;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.