ofstream输出对齐问题如何解决?

7

我希望将程序输出的数据保存到文本文件中。以下是我的当前工作示例,其中还包括日期/时间信息(我在运行Windows系统):

#include <iostream>
#include <fstream>
#include <time.h>

using namespace std;

int main()
{

char dateStr [9];
char timeStr [9];

_strdate(dateStr);
_strtime(timeStr);

ofstream output("info.txt", ios::out);
output << "Start time part 1 " << "\t" << timeStr << " on " << dateStr << "\n";
output << "Start time part 1000000 " << "\t" << timeStr << " on " << dateStr << "\n";
output.close();


return 0;
}

然而对于我作为用户来说,“info.txt”的输出不是很可读,因为时间和日期戳没有对齐。以下是输出结果:

Start time part 1   15:55:43 on 10/23/12
Start time part 1000000     15:55:43 on 10/23/12

我的问题是,有没有一种方法来对齐后面的部分?
2个回答

8

是的, <iomanip>头文件提供了setw操作符,允许您设置输出到ostream流中每个字段的宽度。使用setw操作符来代替制表符作为每行输出的控制方式会更加紧密:

output << setw(25) << "Start time part 1 " << timeStr << " on " << dateStr << endl;
output << setw(25) << "Start time part 1000000 " << timeStr << " on " << dateStr << endl;

要将字符串左对齐,请添加left操作符:

output << left << setw(25) << "Start time part 1 " << timeStr << " on " << dateStr << endl;
output << left << setw(25) << "Start time part 1000000 " << timeStr << " on " << dateStr << endl;

2
只是一点提示:虽然 std::setw 仅适用于下一个插入,但 std::left 永久修改流。如果它是全局流,比如 std::cout,一个行为良好的方法应该保存/恢复 output.flags(),以便您的特定格式设置偏好不会在程序的其他地方导致奇怪的结果。 - jwm

3
int max_align = 10;
output << "Start time part 1 " << "\t" << timeStr 
<< std::string(max_align-timeStr.size(), " ") << " on " << dateStr << "\n";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接