将 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 格式对齐为表格的列的主要内容,如果未能解决你的问题,请参考以下文章