Formatting: how to convert 1 to “01”, 2 to “02”, 3 to "03", and so on
Solution 1
If you don't mind the overhead you can use a 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();
}
Solution 2
As from your comment:
"I assumed, using %02 was a standard c/c++ practice. Am I wrong?"
Yes, you are wrong. Also c/c++ isn't a thing, these are different languages.
C++ std::cout
doesn't support printf()
like formatting strings. What you need is setw()
and setfill()
:
cout << "time remaining: " << setfill('0')
<< setw(2) << hr << ':' << setw(2) << mins << ':' << setw(2) << secs;
If you want a std::string
as result, you can use a std::ostringstream
in the same manner:
std::ostringstream oss;
oss << setfill('0')
<< setw(2) << hr << ':' << setw(2) << mins << ':' << setw(2) << secs;
cout << "time remaining: " << oss.str();
Also there's a boost library boost::format
available, that resembles the format string/place holder syntax.
Comments
-
Daqs over 1 year
Following code outputs the values in time format, i.e. if it's 1:50pm and 8 seconds, it would output it as 01:50:08
cout << "time remaining: %02d::%02d::%02" << hr << mins << secs;
But what I want to do is (a) convert these ints to char/string (b) and then add the same time format to its corresponding char/string value.
I have already achieved (a), I just want to achieve (b).
e.g.
char currenthour[10] = { 0 }, currentmins[10] = { 0 }, currentsecs[10] = { 0 }; itoa(hr, currenthour, 10); itoa(mins, currentmins, 10); itoa(secs, currentsecs, 10);
Now if I output 'currenthour', 'currentmins' and 'currentsecs', it will output the same example time as, 1:50:8, instead of 01:50:08.
Ideas?
-
RichN about 8 yearsI would change your opening sentence to: ""Use a 'std::stringstream'". Performance should only be a concern once the software works correctly but doesn't meet its timing constraints.
-
Haatschii about 8 years@RichN Feel free to edit my post. Although to me the OP suggested that a rather low level implementation is used/wanted, which is why I added the performance hint. Nevertheless I completely agree to your argument.