web-dev-qa-db-ja.com

C ++出力演算子で先行ゼロを出力しますか?

C++で出力をフォーマットするにはどうすればよいですか?つまり、次のようなprintfの使用に相当するC++とは何ですか:

printf("%05d", zipCode);

C++でprintfを使用できることはわかっていますが、出力演算子<<

以下を使用しますか?

std::cout << "Zip code: " << sprintf("%05d", zipCode) << std::endl;
52
Frank

これは、少なくとも負でない数に対してはトリックを行います(a) 郵便番号など(b) あなたの質問に記載されています。

_#include <iostream>
#include <iomanip>

using namespace std;
cout << setw(5) << setfill('0') << zipCode << endl;

// or use this if you don't like 'using namespace std;'
std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl;
_

パディングを制御する最も一般的なIOマニピュレーターは次のとおりです。

  • std::setw(width)は、フィールドの幅を設定します。
  • std::setfill(fillchar)は、フィル文字を設定します。
  • std::setiosflags(align)は配置を設定します。alignはios :: leftまたはios :: rightです。

そして、_<<_を使用することを好みますが、fmtライブラリを調べることを強くお勧めします。これは、ものをフォーマットするためのツールキットへの素晴らしい追加であり、非常に長いストリームパイプラインよりもはるかに優れており、次のようなことができます:

_cout << fmt::format("{:05d}", zipCode);
_

そして現在、LEWGがC++ 20をターゲットにしています。つまり、その時点で言語の基本部分になることを意味します(完全にこっそり入っていない場合はほぼ確実に後であることを意味します)。


(a) do負の数を処理する必要がある場合、次のように_std::internal_を使用できます。

_cout << internal << setw(5) << setfill('0') << zipCode << endl;
_

これにより、フィル文字between符号と大きさが配置されます。


(b) これ(「すべての郵便番号は負ではない」)は私の側の仮定ですが、合理的に安全なものです、私は保証します:-)

82
paxdiablo

setw and setfill 呼び出しを使用します。

std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl;
9
Nik Reiman
cout << setw(4) << setfill('0') << n << endl;

から:

http://www.fredosaurus.com/notes-cpp/io/omanipulators.html

4
anthony

または、

char t[32];
sprintf_s(t, "%05d", 1);

oPがすでに実行したかった00001を出力します

1
Jason Newland