使用C++模板类完成string与各种数值类型的互相转换

前言

       <sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来完成流的输入、输出和输入输出操作。

代码

#ifndef keyven_str2num_h
#define keyven_str2num_h

#include <sstream>
#include <string>

namespace keyven_str2num
{
    using namespace std;

    template<typename T>
    class Str2num
    {
    private:
        stringstream buffTemp;    // stringstream 创建、析构比较耗时,直接重复使用
    public:
        void num2str(string &result, const T &num);
        T str2num(const string &str);
    };
}

namespace keyven_str2num
{
    template<typename T>
    void Str2num<T>::num2str(string &result, const T &num)
    {
        buffTemp.clear();    // 每次重用前先清空并初始化
        buffTemp.str("");

        buffTemp << num;
        result = buffTemp.str();
    }

    template<typename T>
    T Str2num<T>::str2num(const string &str)
    {
        buffTemp.clear();
        buffTemp.str("");

        T result;
        buffTemp << str;
        buffTemp >> result;

        return result;
    }
}

#endif

测试

#include <iostream>
#include "CTool\Str2num\str2num.h"

int main()
{
    using namespace std;
    using namespace keyven_str2num;

    Str2num<double> con;
    string str;
    con.num2str(str, 3.14159265);
    cout << str << endl;
    double a;
    a = con.str2num(str);
    cout << (int)a << endl;

    return 0;
}

Reference

用标准C++进行string与各种内置类型数据之间的转换

你可能感兴趣的:(C++数字与string互转)