zoukankan      html  css  js  c++  java
  • C++中使用stringstream简化类型转换

    C++标准库中的<sstream>提供了一个stringstream,以前基本没用过,突然发现很好用(^-^)V

    参见 http://www.cplusplus.com/reference/sstream/stringstream/

    如果你打算在多次转换中使用同一个stringstream对象,记住再每次转换前要使用clear()方法;

    在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。

    如何用使用stringstream进行类型转换:

    1. 下面例子为整型和sting类型的相互转换示例

    整型转换为字符串类型

    string NumberToString(int num)
    {
        stringstream ss;
        ss<<num;   //像流中传值
        string result;
        ss>>result;  //将流中的值写入到result
        return result;
    }

    字符创类型转换为整型

    int StringToNumber(string strNum)
    {
        stringstream ss;
        ss<<strNum;
        int result;
        ss>>result;
        return result;
    }

    编译期就确定了num,result,strNum的类型,调用stringstream的时候拥有足够的信息判断来进行自动转换,并将转换结果缓存到stringstream对象的内部缓冲中

    stringstream对象会根据需要自动分配内存,不用担心溢出问题.

    例如:

    float n = 22.22;
    string strNum = "22.22";
    cout<<StringToNumber(strNum)<<endl;
    cout<<NumberToString(n)<<endl;

    输出:22 22

    2. 任意类型的转换

    template <class output_type,class input_type>
    output_type Convert(const input_type &input)
    {
        stringstream ss;
        ss<<input;
        output_type result;
        ss>>result;
        return result;
    }

    例如:

    float n = 22.22;
    string strNum = "22.22";

    float f = Convert<float>(strNum);
    cout<<f<<endl;
    string ss = Convert<string>(n);
    cout<<ss<<endl;

    输出: 22.22 22.22

    3. 自定义类型的转换

    <sstream>库还提供了另外一个特性—可扩展性,你可以通过重载来支持自定义类型间的转换,下次在探究

  • 相关阅读:
    bzoj2124 等差子序列(树状数组+hash)
    CF817F MEX Queries(线段树上二分)
    [USACO12MAR]摩天大楼里的奶牛(状态压缩DP)
    CF786B Legacy(线段树优化建图)
    绿豆蛙的归宿
    单选错位
    聪聪和可可
    Tyvj1952 Easy
    OSU!
    弱题
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/5312478.html
Copyright © 2011-2022 走看看