C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream头文件。
istringstream类用于执行C风格的串流的输入操作。
ostringstream类用于执行C风格的串流的输出操作。
stringstream类同时可以支持C++风格的串流的输入输出操作。
下图详细描述了几种类之间的继承关系:
简单的str和num(int类型)转换直接可以用stringstream类来实现,代码如下:
#include <sstream>
#include <string>
string num2str(double i) //数字转字符串
{
stringstream ss;
ss<<i;
return ss.str();
}
int str2num(string s) //字符串转数字
{
int num;
stringstream ss(s);
ss>>num;
return num;
}
也可以使用ostringstream将字符串转换为数值:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
template<class T>
inline string toString(const T &v){
ostringstream os; //创建字符串输入流
os<<v; //将变量v的值写入字符串流
return os.str(); //返回输出流生成的字符串
}
int main(){
string str1=toString(5);
cout<<str1<<endl;
string str2=toString(1.2);
cout<<str2<<endl;
return 0;
}
运行结果:
接着利用istringstream将字符串转换为数值:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
template<class T>
inline T fromString(const string &str){
istringstream is(str); //创建字符串输入流
T v;
is>>v; //从字符串输入流中读取变量v
return v; //返回变量v
}
int main(){
int v1=fromString<int>("5");
cout<<v1<<endl;
double v2=fromString<double>("1.2");
cout<<v2<<endl;
return 0;
}
运行结果: