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; }
运行结果:
文章来源: C++数值与字符串转换