数字到固定长度的字符串

时间:2013-08-20 05:50:29

标签: c++ string

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

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

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

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

4 个答案:

答案 0 :(得分: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;
//        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

如果millisecondsfloat,您还可以使用std::setprecision

#include <iomanip>    // for std::setprecision

std::cout << formatted_time_string << ":" << std::setprecision(3) << milliseconds << " ... other stuff" << std::endl;
//                                        ^^^^^^^^^^^^^^^^^^^^^^^

答案 1 :(得分:6)

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

std::out << setw(3) << formatted_time_string << ":" << std::to_string(milliseconds)

答案 2 :(得分:0)

为什么不以Boost方式?

#include<boost/format.hpp>

 std::cout << boost::format("%s: %03d :%s\n") 
               % formatted_time_string % milliseconds % " ... other stuff";      

答案 3 :(得分:0)

以上方法没关系,但对我来说不满意。

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

wchar_t milliseconds_array[64] = { 0 };
_snwprintf_s(milliseconds_array, sizeof(milliseconds_array), L"%03d", milliseconds);
std::wstring  milliseconds_str = milliseconds_array;