C++ stringstream实现不同类型数据的转换

利用stringstream构造一个函数,可以将任意类型转换为string类型。

//构造一个任意类型转换string类型的函数
template<class T>
void toString(string &s, const T &t)
{
    stringstream ss;
    ss << t;
    s = ss.str();
    //或ss >> s;
}

利用stringstream构造一个函数,可以将任意类型转换为任意类型。

//构造一个任意类型转换任意类型的函数
template<class outT, class inT>
outT convert(const inT &in)
{
    stringstream ss;
    outT out;
    ss << in;
    ss >> out;
    return out;
}

执行结果如下:
函数toString()

    string str1, str2, str3;
    double dnum = 123.456;
    toString(str1, dnum);
    //或者使用toString<double>(str1, dnum);
    cout << "str1: " << str1 << endl;

    //输出str1: 123.456

函数convert()

    float fnum = 456.123;
    str2 = convert<string>(fnum);
    //或者使用str2 = convert<string, float>(fnum);
    cout << "str2: " << str2 << endl;

    //输出str1: 456.123   

此外,string中的空格将会阻断转换

    int a;
    double b;
    str3 = "1 23.789";
    a = convert<int>(str3);
    b = convert<double>(str3);
    cout << "a: " << a << "; " << "b: " << b << endl;

    //输出a: 1; b: 1

如果采用istringstream则会分别赋值

#include <iostream>
#include <sstream>
#include <string>

using namespace std;
int main()
{
    istringstream istr;
    istr.str("1 56.7");
    //上述两个过程可以简单写成 istringstream istr("1 56.7");
    cout << istr.str() << endl;
    int a;
    float b;
    istr >> a;
    cout << a << "; ";
    istr >> b;
    cout << b << endl;
    return 0;
}
//输出1; 56.7

完整代码如下:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
//构造一个任意类型转换string类型的函数
template<class T>
void toString(string &s, const T &t)
{
    stringstream ss;
    ss << t;
    s = ss.str();
    //ss >> s;
}
//构造一个任意类型转换任意类型的函数
template<class outT, class inT>
outT convert(const inT &in)
{
    stringstream ss;
    outT out;
    ss << in;
    ss >> out;
    return out;
}

int main()
{
    string str1, str2, str3;
    double dnum = 123.456;
    toString(str1, dnum);
    //或者使用toString<double>(str1, dnum);
    cout << "str1: " << str1 << endl;

    float fnum = 456.123;
    str2 = convert<string>(fnum);
    //或者使用str2 = convert<string, float>(fnum);
    cout << "str2: " << str2 << endl;

    int a;
    double b;
    str3 = "1 23.789";
    a = convert<int>(str3);
    b = convert<double>(str3);
    cout << "a: " << a << "; " << "b: " << b << endl;

    return 0;
}

PS:在进行多次转换的时候,两次转换之间必须调用stringstream的成员函数clear()

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值