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)
您可以使用std::fixed,std::setprecision,std::setw和std::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已定义。