标准库中是否有可以像 一样工作std::to_string
但长度固定的函数?
std::cout << formatted_time_string << ":" << std::to_string(milliseconds) << " ... other stuff" << std::endl;
在上面的示例中,毫秒范围为 1 到 3 位,因此输出格式不正确。
我知道有很多其他选项可以做到这一点(例如sprintf
,计算长度等),但是有一个内联选项会很好。
您可以使用该std::setw()
功能设置在输出操作期间使用的字段。要保持正确对齐,您可以使用std::setfill()
:
#include <iomanip> // for std::setw and std::setfill
std::cout << std::setfill('0') << std::setw(3) << formatted_time_string << ":" << std::to_string(milliseconds) << " ... other stuff" << std::endl;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果milliseconds
是 a float
,您还可以使用std::setprecision
:
#include <iomanip> // for std::setprecision
std::cout << formatted_time_string << ":" << std::setprecision(3) << milliseconds << " ... other stuff" << std::endl;
// ^^^^^^^^^^^^^^^^^^^^^^^
尝试使用 setw() 来格式化输出。
std::out << setw(3) << formatted_time_string << ":" << std::to_string(milliseconds)
为什么不采用Boost方式?
#include<boost/format.hpp>
std::cout << boost::format("%s: %03d :%s\n")
% formatted_time_string % milliseconds % " ... other stuff";
上面的方法还可以,但是有些东西对我不满意。
所以,我将此代码用于我的项目。
wchar_t milliseconds_array[64] = { 0 };
_snwprintf_s(milliseconds_array, sizeof(milliseconds_array), L"%03d", milliseconds);
std::wstring milliseconds_str = milliseconds_array;