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
如有侵犯版权,请联系我们删除。