std::string 之 format

format类似函数

#include <string>
#include <vector>
 
/**
 * 功能:格式化字符串
 * 参数:
 *  @pszFmt,格式描述
 *  @...,不定参数
 * 返回值:格式化的结果字符串
 */
std::string format(const char *pszFmt, ...)
{
    std::string str;
    va_list args;
    va_start(args, pszFmt);
    {
        int nLength = _vscprintf(pszFmt, args);
        nLength += 1;  //上面返回的长度是包含\0,这里加上
        std::vector<char> vectorChars(nLength);
        _vsnprintf(vectorChars.data(), nLength, pszFmt, args);
        str.assign(vectorChars.data());
    }
    va_end(args);
    return str;
}
 
//使用示例:
char c = 'A';
std::string str = format("c=%c", c);  // c=A
     
int i = 10;
str = format("i=%c", i);  // i=10
 
double d = 1.5;
str = format("d=%f", d);  // d = 1.500000
 
std::string strName = ("txdy");
str = format("I am %s", strName.c_str());  // I am txdy

C++标准库提倡的方式:

#include <sstream>   
 
ostringstream s;
s<<111<<","<<222;

c++流格式化: 

enum {

          skipws  = 0x0001,  //跳过当天及后面所有连续的空白符。

          left  = 0x0002,

          right  = 0x0004,

          internal   = 0x0008,//在指定的域宽内数值的符号按左对齐、数值本身按右对齐输出。

          dec  = 0x0010,   //10

          oct  = 0x0020,   //8

          hex   = 0x0040, //16

          showbase= 0x0080,  //8进制:0、16进制:0x ,10无。

          showpoint= 0x0100,

          uppercase= 0x0200,

          showpos= 0x0400,

          scientific= 0x0800,

          fixed  = 0x1000,

   unitbuf    = 0x2000,

   stdio      = 0x4000

        };

//x3_1.cpp,指定格式的输入输出流的各种控制符的使用
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{

   int  x=1000;
   double  y=1.23456789;
   cout<<"默认x值:"<<x<<endl;
   cout<<"十进制:"<<dec<<x<<endl;                                    //dec oct hex 会一直作用。
   cout<<"八进制:"<<oct<<x<<endl;
   cout<<"十六进制:"<<hex<<x<<endl;
   cout<<"十六进制(大写字母):"<<hex<<uppercase<<x<<endl<<endl;
   cout<<"默认y值(左对齐且有效数字位数为6):"<<y<<endl;     
   cout<<"宽度为10并右对齐:"<<setw(10)<<right<<y<<endl;
   cout<<"宽度为8:"<<setw(8)<<y<<endl;
   cout<<"宽度为4:"<<setw(4)<<y<<endl;
   cout<<"用*号填充空位(10位宽度):"<<setfill('*')<<setw(10)<<y<<endl; //setw(int i) 只对紧随的数据显示有影响。控制多个数据要多个setw()method.
   cout<<"设精度为3输出y(不包括小数点):"<<setprecision(3)<<y<<endl;    //setprecision(int i) 会一直作用
   cout<<"设精度为8输出y(不包括小数点):"<<setprecision(8)<<y<<endl;  
   cout<<"显示正负号:"<<showpos<<y<<endl;
   cout<<"用科学计数法表示y:"<<scientific<<y<<endl;     
   cout<<"用科学计数法表示y(控制E前数据的小数点后位数):"<<scientific
       <<setprecision(3)<<y<<endl;
}

 format函数,转载自:http://www.suchone.com/post/43.html

 流格式化,转自:https://www.cnblogs.com/netact/archive/2012/02/08/2335640.html

  如有侵犯版权,请联系我们删除。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值