12

C++ ストリームで出力をフォーマットして、固定幅の左揃えのテーブルを印刷するにはどうすればよいですか? 何かのようなもの

printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345);

生成している

12345.123     12345.123
4

4 に答える 4

17

標準ヘッダー<iomanip>をインクルードして夢中になろう。具体的には、setwマニピュレータは出力幅を設定します。setfill塗りつぶし文字を設定します。

于 2009-02-25T15:24:39.637 に答える
15
std::cout << std::setiosflags(std::ios::fixed)
          << std::setprecision(3)
          << std::setw(18)
          << std::left
          << 12345.123;
于 2009-02-25T15:23:37.033 に答える
11

次のいずれかによって提供される、より使いやすい機能を検討することもできます。

  • Boost.Format (強力ですが、非常に重く、他の言及よりも多くの時間とメモリが割り当てられます)
  • Loki.SafeFormat
  • FastFormat (比較的新しいが、非常に高速なライブラリであり、他のものとは異なり型安全でもある)

メモリから書き込みますが、次の行に沿ったものにする必要があります。

// 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);

また、これらの書式設定ライブラリのいずれかに固執する場合は、表現可能性、移植性 (およびその他のライブラリ依存性)、効率、国際化のサポート、タイプ セーフなどのコンテキストでそれらの制限を徹底的に調べてください。

于 2009-02-25T15:26:04.283 に答える
5

ストリーム マニピュレータを使用したい場合:

http://www.deitel.com/articles/cplusplus_tutorials/20060218/index.html

于 2009-02-25T15:25:02.477 に答える