2013-08-20 3 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; 
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

Если milliseconds является float, вы можете также использовать 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; 
Смежные вопросы