格式化:如何将1转换为“01”,将2转换为“02”,将3转换为“03”,依此类推

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了格式化:如何将1转换为“01”,将2转换为“02”,将3转换为“03”,依此类推相关的知识,希望对你有一定的参考价值。

以下代码以时间格式输出值,即如果它是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)。

EG

    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();
}
另一答案

从你的comment

“我认为,使用%02是标准的c / c ++练习。我错了吗?”

是的,你错了。 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,类似于格式字符串/占位符语法。

另一答案

作为其他答案中建议的iostreams的替代方法,您还可以使用安全的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的作者。

以上是关于格式化:如何将1转换为“01”,将2转换为“02”,将3转换为“03”,依此类推的主要内容,如果未能解决你的问题,请参考以下文章

在EXCEL中如何将日期格式转换,例如把2012/09/01变换成2012-09-01?

SQL中如何将数值格式的20110801(2011年8月01日)转换为日期格式的201108或者2011-08?

如何将 Excel 中的日期转换为 ISO 8601 格式

使用 Python 将 Excel 转换为 JSON,如何根据需要格式化这些数据?

如何将“YYYYMM”格式转换为“YYYY-MM-00”?

如何将日期转换为字符串格式。? [复制]