istringstream、ostringstream和stringstream

3/8/2017来源:ASP.NET技巧人气:1811

库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作。 注意,使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即使使用了不正确的格式化符也没有危险。

#include <sstream> #include <iostream> using namespace std; /************************************************************************/ /* 将任意类型转为字符串 */ /************************************************************************/ template<class T> void to_string(string &result , const T& t) { ostringstream oss ;//创建一个流 oss<<t ;//把值传递到流中 result = oss.str() ;//获取转换后的字符并将其写入result } /************************************************************************/ /* 任意类型之间的转换 */ /************************************************************************/ template<class T_in , class T_out> T_out convert(const T_in &t) { stringstream stream ; stream<<t ;//向流中传值 T_out result ;//这里存储转换结果 stream>>result ;//向result中写入值 return result ; } /************************************************************************/ /* string 转char* */ /************************************************************************/ char* StringToChar(const string& str) { stringstream stream ; char *resulst = new char[sizeof(str) + 1] ; stream << str ; stream >> resulst ; cout<<resulst<<endl ; return resulst ; } void main() { string str1 ; to_string(str1 , 10.2) ; cout<<str1<<endl ; double d ; string s = "12.56" ; d = convert<string , double>(s) ; cout<<d<<endl ; }