c++ - 有没有办法一次性设置每个字段的宽度,而不是每次都使用 streamio 设置?

标签 c++ iostream

我需要获取两位数格式的日期和月份。但是,不是一直使用 setw,而是有一个设置可以说将每个字段设置为最小“x”长度。

void getDate(std::string& m_resultDate)
{

    time_t curTime;
    struct tm *curTimeInfo;
    std::stringstream sCurDateTime(std::stringstream::out | std::stringstream::in);

    time(&curTime);
    curTimeInfo = localtime(&curTime);

    sCurDateTime.width(4);
    sCurDateTime.fill('0');

    sCurDateTime << ( curTimeInfo->tm_year + 1900 );
    sCurDateTime.width(2);
    sCurDateTime.fill('0');

    sCurDateTime << ( curTimeInfo->tm_mon) ;

    sCurDateTime.width(2);
    sCurDateTime.fill('0');
    sCurDateTime << ( curTimeInfo->tm_mday) ;

    m_resultDate = sCurDateTime.str();

}

最佳答案

Iostream 是变化无常的,您不能真正依赖各种格式化标志来保持。但是,您可以使用 <iomanip>把事情写得更简洁一点:

#include <iomanip>
using namespace std;
o << setw(2) << setfill('0') << x;

o << hex 这样的修饰符和 o << uppercase通常持续存在,而精度和字段宽度修饰符则不会。不确定填充字符。

关于c++ - 有没有办法一次性设置每个字段的宽度,而不是每次都使用 streamio 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6796808/

相关文章:

c++ - 如果指定 value_types 不同的分配器会怎样?

c++ - 这段代码不应该抛出一个模棱两可的转换错误吗?

c++ - 程序不会在 exit() 函数之前打印行?

vim - 如何在 Vim 中左对齐 IO 流运算符 << 和 >>?

c++ - std::cin 在不应该接收输入时接收输入

c++ - 为什么编译器测试地址中的最低有效位?

c++ - 如何将私有(private)数据附加到 libxml2 或 gdome dom 树

c++ - 将字符串时间转换为 unix 时间,反之亦然

c++ - 流、stream_bufs、codecvt 方面和\n 到\r\n 翻译

c++ - 将固定长度的数据从 std::istream 复制到字符串