使用stringstreams的c ++自定义字符串格式

时间:2013-04-25 12:24:46

标签: c++ string-formatting

我正在尝试使用新的stringstreams方法将某些float + int组合转换为某种格式,但试图查看是否有更好的方法来处理这个:

现在使用// string String = static_cast(&(ostringstream()<< Number)) - > str();一种模式 - 如何将其存储为格式的字符串形式 - “1.10(3)”。精度等于小数。这里的问题是这些值都不是常量。即使解决方案不能是内联函数或字符串流 - 只要它足够通用就可以了。另请注意,最后计划是将此字符串用于GDI文本字符串。

提前致谢 - 如果有人可以提供帮助的话。

这是我当前的示例代码(并寻找另一种有效的方法来完成此任务):

string Convert(float number,int decimals)
{
std::ostringstream buff;
buff<<setprecision(decimals)<<fixed<<number;
return buff.str();
}


float f=1.1;     // this can have any values from 1,1.5 or 1.52
int decimals=2;  //dynamic number - calculated by other means - not a fixed number
int i=3;         // some dynamic number as well - calculated by other means

string s=Convert(f,decimals)+"("+Convert(i,0)+")";  // output - 1.10(3)

1 个答案:

答案 0 :(得分:4)

您可以使用std::fixed中定义的std::setprecisionstd::setwstd::setfill<iomanip>

float f=1.1;  
int decimals=2;
int i=3;
ostringstream ss;
ss << std::fixed << std::setprecision(decimals) << f << '(' << i << ')';
string str = ss.str();

哪个输出:

1.10(3)

您还可以配置字符串流并保持此配置:

ostringstream ss;
ss.precision(5);
ss.setf(std::ios::fixed);

修改

如果您真的想要:

,您仍然可以在一行中执行此操作
string str = ((ostringstream&)(ostringstream() << fixed << setprecision(decimals) << f << '(' << i << ')')).str();

如果您想要LPCWSTRconst wchar_t *)而不是LPCSTRconst char*),则应使用wstringstream代替stringstream

ostringstream ss;
string str = ss.str();
LPCSTR* c_str = str.c_str();

wostringstream wss;
wstring wstr = wss.str();
LPCWSTR* wc_str = wstr.c_str();

如果您想要LPCTSTRLPCSTRLPCWSTR,如果定义了UNICODE),您可以使用以下typedef {/ p>}

typedef std::basic_string<TCHAR> tstring;
typedef std::basic_ostringstream<TCHAR , std::char_traits<TCHAR> > tstringstream;

tostringstream tss;
tstring tstr = tss.str();
LPCTSTR* tc_str = tstr.c_str();
如果您的项目中未定义char *,则TCHAR为UNICODE;如果wchar_t *已定义,则为UNICODE