2

标准库中是否有可以像 一样工作std::to_string但长度固定的函数?

std::cout << formatted_time_string << ":" << std::to_string(milliseconds) << " ... other stuff" << std::endl;

在上面的示例中,毫秒范围为 1 到 3 位,因此输出格式不正确。

我知道有很多其他选项可以做到这一点(例如sprintf,计算长度等),但是有一个内联选项会很好。

4

4 回答 4

7

您可以使用该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;
//                                        ^^^^^^^^^^^^^^^^^^^^^^^
于 2013-08-20T05:56:17.983 回答
6

尝试使用 setw() 来格式化输出。

std::out << setw(3) << formatted_time_string << ":" << std::to_string(milliseconds)
于 2013-08-20T05:54:34.047 回答
0

为什么不采用Boost方式?

#include<boost/format.hpp>

 std::cout << boost::format("%s: %03d :%s\n") 
               % formatted_time_string % milliseconds % " ... other stuff";      
于 2013-08-20T06:08:25.680 回答
0

上面的方法还可以,但是有些东西对我不满意。

所以,我将此代码用于我的项目。

wchar_t milliseconds_array[64] = { 0 };
_snwprintf_s(milliseconds_array, sizeof(milliseconds_array), L"%03d", milliseconds);
std::wstring  milliseconds_str = milliseconds_array;
于 2017-03-15T00:28:03.897 回答