Следующий код выводит значения в формате времени, то есть, если это 1:50 вечера и 8 секунд, он будет выводить его как 01:50:08
cout << "time remaining: %02d::%02d::%02" << hr << mins << secs;
Но я хочу (а) преобразовать эти целые числа в символ / строку (б), а затем добавить тот же формат времени к соответствующему значению символа / строки.
Я уже достиг (а), я просто хочу достичь (б).
например
char currenthour[10] = { 0 }, currentmins[10] = { 0 }, currentsecs[10] = { 0 };
itoa(hr, currenthour, 10);
itoa(mins, currentmins, 10);
itoa(secs, currentsecs, 10);
Теперь, если я выведу «currenthour», «currentmins» и «currentsecs», он выдаст то же время, что и 1: 50: 8, а не 01:50:08.
Идеи?
Если вы не против накладных расходов, вы можете использовать std::stringstream
#include <sstream>
#include <iomanip>
std::string to_format(const int number) {
std::stringstream ss;
ss << std::setw(2) << std::setfill('0') << number;
return ss.str();
}
Как из вашего комментарий:
«Я предположил, что использование% 02 было стандартной практикой с / с ++. Я ошибаюсь?»
Да вы не правы Также с / с ++ не вещь, это разные языки.
C ++ std::cout
не поддерживает printf()
как форматирование строк. Что вам нужно setw()
а также setfill()
:
cout << "time remaining: " << setfill('0')
<< setw(2) << hr << ':' << setw(2) << mins << ':' << setw(2) << secs;
Если вы хотите std::string
В результате вы можете использовать std::ostringstream
таким же образом:
std::ostringstream oss;
oss << setfill('0')
<< setw(2) << hr << ':' << setw(2) << mins << ':' << setw(2) << secs;
cout << "time remaining: " << oss.str();
Также есть библиотека повышения boost::format
доступно, что напоминает формат строки / синтаксис заполнителя.
В качестве альтернативы IOStreams, предложенной в других ответах, вы также можете использовать безопасную реализацию printf, такую как библиотека fmt:
fmt::printf("time remaining: %02d::%02d::%02d", hr, mins, secs);
Он поддерживает как printf, так и Python-подобный синтаксис строки формата, где указатели типа могут быть опущены:
fmt::printf("time remaining: {:02}::{:02}::{:02}", hr, mins, secs);
отказЯ автор fmt.