以下代码以时间格式输出值,即如果它是1:50 pm和8秒,则会将其输出为01:50:08
cout << "time remaining: %02d::%02d::%02" << hr << mins << secs;
但我想要做的是(a)将这些int转换为char / string(b),然后将相同的时间格式添加到其对应的char / string值。
我已经实现了(a),我只想实现(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);
现在,如果我输出'currenthour','currentmins'和'currentsecs',它将输出相同的示例时间,1:50:8,而不是01:50:08。
想法?
答案 0 :(得分:4)
如果您不介意开销,可以使用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();
}
答案 1 :(得分:3)
从您的comment:
开始&#34;我认为,使用%02是标准的c / c ++实践。我错了吗?&#34;
是的,你错了。另外c / c ++不是一件事,这些是不同的语言。
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
,类似于格式字符串/占位符语法。
答案 2 :(得分:0)
作为其他答案中建议的IOStream的替代方法,您还可以使用安全的printf实现,例如fmt library:
fmt::printf("time remaining: %02d::%02d::%02d", hr, mins, secs);
它支持printf和类似Python的格式字符串语法,其中可以省略类型说明符:
fmt::printf("time remaining: {:02}::{:02}::{:02}", hr, mins, secs);
免责声明:我是fmt的作者。