How do I format my output in C++ streams to print fixed width left-aligned tables? Something like
printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345);
poducing
12345.123 12345.123
-
std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(3) << std::setw(18) << std::left << 12345.123; -
Include the standard header
<iomanip>and go crazy. Specifically, thesetwmanipulator sets the output width.setfillsets the filling character.Anonymous : +1 for literally going crazy. -
You want to use stream manipulators:
http://www.deitel.com/articles/cplusplus_tutorials/20060218/index.html
-
You may also consider more friendly functionality provided by one of these:
- Boost.Format (powerful, but very heavy, more time and memory allocations than other mentioned)
- Loki.SafeFormat
- FastFormat (relatively new, but blazing fast library, also type-safe unlike the others)
Writing from memory, but should be something along these lines:
// Dumb streams: printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345); // For IOStreams you've got example in the other answers // Boost Format supports various flavours of formatting, for example: std::cout << boost::format("%-14.3f%-14.3f\n") % a % b; std::cout << boost::format("%1$-14.3f%2$-14.3f\n") % a % b; // To gain somewhat on the performance you can store the formatters: const boost::format foo("%1$-14.3f%2$-14.3f\n"); std::cout << boost::format(foo) % a % b; // For the Loki::Printf it's also similar: Loki::Printf("%-14.3f%-14.3f\n")(a)(b); // And finally FastFormat.Format (don't know the syntax for decimal places) fastformat::fmtln(std::cout, "{0,14,,<}{1,14,,>}", a, b);Also, if you plan to stick with any of these formatting libraries, examine thoroughly their limitations in context of expressibility, portability (and other library dependency), efficiency, support of internationalisation, type-safety, etc.
jwfearn : could you add links?Anonymous : Links now, examples tomorrow afternoon (GMT time) -
Thanks,
<iomanip>works. I also found Boost::Format, which seams to be a pretty much printf like library for string formating.Anonymous : Be aware of the boost::format cost though...
0 comments:
Post a Comment