string利用stringstream进行格式化

0.stringstream所需头文件#include <sstream>

1.stringstream的<<  >> 操作符可以直接操作字符串或数值

如:

#ifdef _UNICODE
typedef std::wstring tstring;
typedef std::wstringstream tstringstream;
#else
typedef std::string tstring;
typedef std::stringstream tstringstream;

#endif

                    int num = 2;
                    tstring strNum;
                    tstringstream stream;
                    stream << num;
                    stream >> strNum;
                   
                    tstring strCHN = _T("汉字");
                    tstring strCHNN;
                    tstringstream strm;
                    strm << strCHN;
                    strm >> strCHNN;

2.>>操作符自动以空格作为截断,所以>>不适合用于输入一个带有空格的字符串,应该使用如下方法:

  stringstream ss;

  string  strSql =  ss.str();

或者使用getline函数

3.当多次使用同一个stringstream时,需要清空缓存

stringstream ss;

错误用法

ss.clear(); //实际上,它并不清空任何内容,它只是重置了流的状态标志而已!

正确用法

ss.str("");   

补:而且需要重置游标

ss.seekg(0);

ss.seekp(0);

4.CString *pStr = new CString("aa");

正确的用法是:ss << LPCTSTR(*pStr);

错误的用法:ss << pStr; ss << *pStr。

5. ostream重载<< 64位无符号整数

std::ostream& operator << (std::ostream& strm, const unsigned __int64 value)
{
    char buf[128] = {0};
    
    _ui64toa(value, buf, 10);
    
    strm << buf;
    
    return strm;
}

6. 十六进制

   unsigned int value = 47041;

    stringstream sstream;

    sstream << std::hex << std::setw(2) << std::setfill('0') << std::uppercase << value ;

补:不能直接输出unsigned char,需要转换为整数:

    unsigned char b =2;

    sstream << std::hex << std::setw(2) << std::setfill('0') << std::uppercase << (unsigned int)b;

7. string与double

(1)指定精度输出

  double f = 3.14159;
  std::cout << std::setprecision(5) << f;// 3.1416

(2)string转double

std::stod();// 该函数本身不会造成精度丢失

(3)double转string,保留精度(实际是指定一个较大的精度值)

stringstream strm;

string str;

double d = 314159.12612712;

strm.precision(12);// 指定12这个较大值

strm << d;

strm >> str;//输出314159.126127

8. 整型定宽及补齐

#include <iomanip>

int n = 2;

stringstream strm;

strm << std::right << std::setfill('0') << std::setw(4) << n; // 宽为4,左边补齐0,即输出0002

9.stringstream无法用转义字符

stringstream strm;

strm << '\t’ << '\r' << '\n';// 均不行,原因未知

9. 由于<<操作符自动以空格作为截断,所以用于条件运算时需要加括号

例如:

stringstream sstream;

bool b = true;

sstream << b ? "是” : “否";// 输出1而不是”是“

需要加括号用:

sstream << (b ? "是” : “否");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值