在C++中漂亮地打印表格

16

我正在寻找一个与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);

相关链接:https://dev59.com/BE7Sa4cB1Zd3GeqP1Cev#2950851 - Inverse
8个回答

25

15

我并不满意我在网上找到的任何一个,因此我写了自己的: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  |
--------------------------------------

这个项目正在一个大型软件项目中积极使用 - 所以它将会随着时间的推移得到维护和开发。欢迎提交问题/PR。


2
克隆存储库后,只要运行make命令就会出现20多个错误。 - Pikachu
它也是仅有头文件! - Yomi1984
很好,它是一个头文件库,但GNU许可证对于非私人使用来说是个问题 :( - AlexGeorg

9
据我所知,这里有三种主要选择: 我不知道是否有任何库能够比这更好地帮助您进行"表格设计"。

5

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


4

1
无法在Visual Studio / Windows上使其正常工作。是的,我运行了CMAKE,但遇到了许多编译错误。 - PentiumPro200

3

在我看来,这两个库是目前最好的选择:

  1. tabulate
  2. libfort

由于libfort是用C语言编写的,因此它比较简单和小巧,而tabulate高度可定制并且是用C++编写的。


非常感谢您的回答。我只是想要一个简单的库,libfort 提供了我所需要的一切,这是一个非常优秀的库。 - lucatrex

0

您可以使用ncurses库来实现它。这是一个C库。


-3

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