C++数值与字符串转换

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;
}

运行结果:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41656968/article/details/80849425