2013-08-20 266 views
2

標準庫中是否有像std::to_string那樣的功能,但是具有固定長度?固定長度字符串的數字

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

在上面的示例中,毫秒範圍從1到3位數,因此輸出格式不正確。

我知道還有很多其他選項如何做到這一點(例如sprintf,計算長度等),但內聯選項將是很好的。

回答

6

嘗試使用setw()格式化輸出。

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

'std :: setw(3)'和'std :: setfill('0')'的組合正是我所期待的。 – Appleshell

7

您可以使用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; 
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

如果millisecondsfloat,你也可以使用std::setprecision

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

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

我剛剛檢查過,'std :: setprecision()似乎對整數沒有影響,只有小數。 – Appleshell

+0

@AdamS是正確的,那麼你應該使用'std :: setw'和'std :: setfill'。 –

+0

@AdamS我也更新了我的答案,以添加'setfill'的示例。 –

0

爲什麼不Boost方式?

#include<boost/format.hpp> 

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

以上方法還行,但事情並不滿足我。

所以,我使用這個代碼爲我的項目。

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