将 cout 格式对齐为表格的列

Posted

技术标签:

【中文标题】将 cout 格式对齐为表格的列【英文标题】:Align cout format as table's columns 【发布时间】:2008-11-09 01:40:20 【问题描述】:

我很确定这是一个关于格式的简单问题,但这是我想要完成的:

我想使用cout 将数据输出到屏幕上。我想以表格格式输出它。我的意思是列和行应该正确对齐。示例:

Test                 1
Test2                2
Iamlongverylongblah  2
Etc                  1

我只关心单独的行,所以我现在要输出的行(不工作)是

cout << var1 << "\t\t" << var2 << endl;

这给了我类似的东西:

Test                 1
Test2                  2
Iamlongverylongblah         2
Etc                  1

【问题讨论】:

【参考方案1】:

setw.

#include <iostream>
#include <iomanip>
using namespace std;

int main () 
  cout << setw(21) << left << "Test"    << 1 << endl;
  cout << setw(21) << left << "Test2"   << 2 << endl;
  cout << setw(21) << left << "Iamlongverylongblah"     << 2 << endl;
  cout << setw(21) << left << "Etc"     << 1 << endl;
  return 0;

【讨论】:

您忘记添加“ std::left 不会在每个格式化输出上重置,您只需要一次。 (流的宽度重置。)【参考方案2】:

我建议使用Boost Format。使用这样的东西:

cout << format("%|1$30| %2%") % var1 % var2;

【讨论】:

【参考方案3】:

您必须找到第一列中最长字符串的长度。然后,您需要在字段的第一列中输出每个字符串,长度为该最长字符串的长度。这必然意味着在你读完每一个字符串之前你不能写任何东西。

【讨论】:

没有更简单的方法吗?使用 setw 什么的。 >没有更简单的方法吗?除非你能预测未来。 >使用 setw 什么的。是的,setw 是一种“输出字段中第一列中的每个字符串,长度为最长字符串的长度”的一种方法。 我见过的大多数格式化输出都不会费心找到一个字段的最大大小,如果它超出了一个不错的值,哦,好吧,但是格式化看起来有点奇怪。 【参考方案4】:

你可以用

string str = "somthing";
printf ("%10s",str);
printf ("%10s\n",str);
printf ("%10s",str);
printf ("%10s\n",str);

【讨论】:

他肯定已经知道使用“printf”可以做到。他特别要求“cout”。 你怎么知道他(OP)知道什么? OP 从未说过他尝试过 printf,也没有说他只想要基于 cout 的答案 (-(-1))。 cout 在标题中,他们写道:“我想使用 cout 将数据输出到屏幕上”

以上是关于将 cout 格式对齐为表格的列的主要内容,如果未能解决你的问题,请参考以下文章

学习总结Markdown 使用-表格及其居中等格式

excel中怎样使表格数据显示为水平居中和垂直居中?

怎么新建表格

excel单元格文字居中,是那种上下左右都居中的方式

怎样将excel表格数字居中

请问怎么在excel单元格格式添加自定义