漂亮用C ++打印一个表

时间:2010-12-17 15:01:12

标签: c++ pretty-print

我正在寻找一个类似于Prettytable但在C ++中的库

http://code.google.com/p/prettytable/

我知道如何使用printf或iostream自己生成一个。但是,我想知道是否有一个库。

我只对将这个ASCII表写入控制台感兴趣。

最好像:

std::vector<std::string> headers;
headers.push_back("My Awesome Header 1");
headers.push_back("My Awesome Header 2");
headers.push_back("My Awesome Header 3");


PrettyTablePrinter ptp;
ptp.SetHeaders(headers);
// Set some other options here
ptp.AddRow(data[0]);
ptp.AddRow(data[1]);
ptp.AddRow(data[2]);

ptp.Print(&std::cout);

8 个答案:

答案 0 :(得分:15)

由于我没有找到一个好的C ++解决方案,我已经为你们写了一个

https://github.com/dattanchu/bprinter/wiki

答案 1 :(得分:4)

虽然不完全符合您的要求,但Boost.Spirit包含一个可用于生成此类输出的库(名为Karma)。文档为here

答案 2 :(得分:3)

据我所知,您有三个主要选择:

我不知道有任何图书馆可以帮助你完成“桌面设计”。

答案 3 :(得分:3)

我对在网上发现的任何内容都不满意,所以我写了自己的:https://github.com/friedmud/variadic_table

它使用可变参数模板来允许每列保持不同的类型。它也只需要C ++ 11。

VariadicTable<std::string, double, int, std::string> vt({"Name", "Weight", "Age", "Brother"});

vt.addRow({"Cody", 180.2, 40, "John"});
vt.addRow({"David", 175.3, 38, "Andrew"});
vt.addRow({"Robert", 140.3, 27, "Fande"});

vt.print();

这将输出:

--------------------------------------
| Name |  Weight  |    Age   |Brother|
--------------------------------------
|Cody  |     180.2|        40|John   |
|David |     175.3|        38|Andrew |
|Robert|     140.3|        27|Fande  |
--------------------------------------

这在大型软件项目中被广泛使用 - 因此它将随着时间的推移而得到维护和开发。随意提交问题/ PRs

答案 4 :(得分:3)

答案 5 :(得分:1)

编写一个用于在C ++中创建表的html非常简单,你不需要一个库。 另一方面,如果你想在控制台上输出表格,可以这样做,但这并不容易,特别是如果你需要做垂直对齐,打破字符串等等。

答案 6 :(得分:0)

您可以使用ncurses库来实现它。它的C库。

答案 7 :(得分:-1)

格式化所有输出的最通用方法,实际上在C ++语言中只使用 方式是使用I / O操纵器。
http://www.fredosaurus.com/notes-cpp/io/omanipulators.html