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

eju*_*ser 1 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)
Run Code Online (Sandbox Code Playgroud)

zak*_*ter 6

您可以使用std::fixedstd::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();
Run Code Online (Sandbox Code Playgroud)

哪些输出:

1.10(3)
Run Code Online (Sandbox Code Playgroud)

您还可以配置 stringstream 并保留此配置:

ostringstream ss;
ss.precision(5);
ss.setf(std::ios::fixed);
Run Code Online (Sandbox Code Playgroud)

编辑

如果您真的想这样做,您仍然可以在一行中执行此操作:

string str = ((ostringstream&)(ostringstream() << fixed << setprecision(decimals) << f << '(' << i << ')')).str();
Run Code Online (Sandbox Code Playgroud)

如果你想要一个LPCWSTR( const wchar_t *) 而不是LPCSTR( const 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();
Run Code Online (Sandbox Code Playgroud)

如果你想要一个LPCTSTR(LPCSTR或者LPCWSTRifUNICODE被定义了),你可以使用一些typedef这样的:

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();
Run Code Online (Sandbox Code Playgroud)

TCHAR 是一个char *ifUNICODE未在您的项目中定义,而一个wchar_t *ifUNICODE已定义。