对齐ofstream的输出

时间:2012-10-23 14:01:19

标签: c++ iostream fstream

我希望将程序中的数据输出到文本文件中。这是一个工作示例,显示我当前是如何做到的,其中还包括日期/时间(我正在运行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 个答案:

答案 0 :(得分: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;

答案 1 :(得分:3)

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