<sstream>库
- <sstream>库定义了三种类:
istringstream、ostringstream和stringstream
,分别用来进行流的输入、输出和输入输出操作。 - 基于该类的转换拥有类型安全和不会溢出的特性。还可以通过重载来支持自定义类型间的转换。
- 如果你打算在多次转换中使用同一个流对象,记住再每次转换前要使用
clear()
方法;
<1>ostringstream
将int、long、double
等类型转换成字符串string
类型。
template<class T>
void to_string(string & result,const T& t){
ostringstream oss;//创建一个流
oss<<t;//把值传递如流中
result=oss.str();//获取转换后的字符转并将其写入result
}
<2>stringstream
任意类型之间的转换。将in_value值转换成out_type类型
template<class out_type,class in_value>
out_type convert(const in_value & t){
stringstream stream;
stream<<t;//向流中传值
out_type result;//这里存储转换结果
stream>>result;//向result中写入值
return result;
}
<3>istringstream
字符串转基本类型
istringstream iss;
iss.str("123");//或者直接构造 istringstream iss2("123 456");
int n;
iss >> n;
>>
以空格为界。会把输入的流用空格分隔开。while(iss2>>str){//每次读取一个单词(以空格为界),存入str中 cout << str<<","; }//123 456
<4>实例
- 基本数据类型转换。int转string
int n = 100;
string str;
//使用stringstream
stringstream ss;
ss << n;
ss >> str;
cout << str << endl;
//使用ostringstream
ostringstream oss;
oss << n;
str = oss.str();
cout << str << endl;
-
char *
的转换
std::stringstream stream;
char result[8] ;
stream << 8888; //向stream中插入8888
stream >> result; //抽取stream中的值到result
std::cout << result << std::endl; // 屏幕显示 "8888"
- 多次转换
多次转换时必须调用stringstream的成员函数clear().
std::stringstream stream;
int first, second;
stream<< "456"; //插入字符串
stream >> first; //转换成int
std::cout << first << std::endl;
stream.clear(); //在进行多次转换前,必须清除stream
stream << true; //插入bool值
stream >> second; //提取出int
std::cout << second << std::endl;