gpt4 book ai didi

c++ - 如何打印一堆具有相同格式的整数?

转载 作者:太空狗 更新时间:2023-10-29 23:46:04 26 4
gpt4 key购买 nike

我想用 '0' 在 2 个字段上打印一堆整数作为填充字符。我可以做到,但它会导致代码重复。我应该如何更改代码才能排除重复代码?

#include <ctime>
#include <sstream>
#include <iomanip>
#include <iostream>

using namespace std;

string timestamp() {

time_t now = time(0);

tm t = *localtime(&now);

ostringstream ss;

t.tm_mday = 9; // cheat a little to test it
t.tm_hour = 8;

ss << (t.tm_year+1900)
<< setw(2) << setfill('0') << (t.tm_mon+1) // Code duplication
<< setw(2) << setfill('0') << t.tm_mday
<< setw(2) << setfill('0') << t.tm_hour
<< setw(2) << setfill('0') << t.tm_min
<< setw(2) << setfill('0') << t.tm_sec;

return ss.str();
}

int main() {

cout << timestamp() << endl;

return 0;
}

我试过了

std::ostream& operator<<(std::ostream& s, int i) {

return s << std::setw(2) << std::setfill('0') << i;
}

但它没有用,operator<<调用不明确。


编辑 我得到了 4 个很棒的答案,我选择了一个可能是最简单和最通用的答案(也就是说,不假设我们正在处理时间戳)。对于实际问题,我可能会使用 std::put_time strftime 虽然。

最佳答案

在 C++20 中,您可以使用 std::format 来完成此操作以一种不那么冗长的方式:

    ss << std::format("{}{:02}{:02}{:02}{:02}{:02}",
t.tm_year + 1900, t.tm_mon + 1, t.tm_mday,
t.tm_hour, t.tm_min, t.tm_sec);

使用 the {fmt} library 更容易直接支持tm格式:

auto s = fmt::format("{:%Y%m%d%H%M%S}", t);

关于c++ - 如何打印一堆具有相同格式的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14084762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com