標準庫中是否有像std::to_string
那樣的功能,但是具有固定長度?固定長度字符串的數字
std::cout << formatted_time_string << ":" << std::to_string(milliseconds) << " ... other stuff" << std::endl;
在上面的示例中,毫秒範圍從1到3位數,因此輸出格式不正確。
我知道還有很多其他選項如何做到這一點(例如sprintf
,計算長度等),但內聯選項將是很好的。
標準庫中是否有像std::to_string
那樣的功能,但是具有固定長度?固定長度字符串的數字
std::cout << formatted_time_string << ":" << std::to_string(milliseconds) << " ... other stuff" << std::endl;
在上面的示例中,毫秒範圍從1到3位數,因此輸出格式不正確。
我知道還有很多其他選項如何做到這一點(例如sprintf
,計算長度等),但內聯選項將是很好的。
嘗試使用setw()格式化輸出。
std::out << setw(3) << formatted_time_string << ":" << std::to_string(milliseconds)
您可以使用std::setw()
函數來設置在輸出操作期間使用的字段。爲了保持正確的alignement,您可以使用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
是float
,你也可以使用std::setprecision
:
#include <iomanip> // for std::setprecision
std::cout << formatted_time_string << ":" << std::setprecision(3) << milliseconds << " ... other stuff" << std::endl;
// ^^^^^^^^^^^^^^^^^^^^^^^
我剛剛檢查過,'std :: setprecision()似乎對整數沒有影響,只有小數。 – Appleshell
@AdamS是正確的,那麼你應該使用'std :: setw'和'std :: setfill'。 –
@AdamS我也更新了我的答案,以添加'setfill'的示例。 –
爲什麼不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;
'std :: setw(3)'和'std :: setfill('0')'的組合正是我所期待的。 – Appleshell