Pretty print a table in C++

前端 未结 8 982
眼角桃花
眼角桃花 2020-12-28 09:25

I am looking for a library similar to prettytable but in C++

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

I know how to generate one myself using either printf or i

相关标签:
8条回答
  • 2020-12-28 09:49

    Since I have not found a good C++ solution, I have written one for you all

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

    0 讨论(0)
  • 2020-12-28 09:54

    It's pretty simple to write an html to create tables in C++, you don't need a library for that. On the other hand if you want table output on console, it can be done, but it's not that easy, especially if you need to do vertical alignment, breaking strings, etc.

    0 讨论(0)
  • 2020-12-28 09:55

    To my knowledge, you have three major options here :

    • A "C way" through the use of printf with width specifiers
    • A "C++ way" through the use of stream manipulators (in particular std::setw and std::setfill)
    • An intermediate way using Boost.Format which allow you to use printf style formatters with streams.

    I'm not aware of any library which could help you in the "table design" more than this.

    0 讨论(0)
  • 2020-12-28 09:56

    You may achieve it using ncurses library. Its C library.

    0 讨论(0)
  • 2020-12-28 10:02

    While not exactly what you're looking for, Boost.Spirit contains a library (named Karma) usable to generate this kind of output fairly easily. The docs are here.

    0 讨论(0)
  • 2020-12-28 10:03

    I wasn't satisfied with any of the ones I found online so I wrote my own: https://github.com/friedmud/variadic_table

    It uses variadic templates to allow each column to hold a different type. It also only requires 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();
    

    This will output:

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

    This is actively being used in a large software project - so it will be maintained and developed over time. Feel free to submit issues / PRs

    0 讨论(0)
提交回复
热议问题