私はC++を学んでいます。クラスcout
のインスタンスです。std::ostream
フォーマットされた文字列を印刷するにはどうすればよいですか?
私はまだ使用できますprintf
が、すべてのC++の利点を活用できる適切なC++メソッドを学びたいと思います。これはで可能だと思いますstd::ostream
が、適切な方法が見つかりません。
私はC++を学んでいます。クラスcout
のインスタンスです。std::ostream
フォーマットされた文字列を印刷するにはどうすればよいですか?
私はまだ使用できますprintf
が、すべてのC++の利点を活用できる適切なC++メソッドを学びたいと思います。これはで可能だと思いますstd::ostream
が、適切な方法が見つかりません。
直接できる唯一のことstd::ostream
は、よく知られている<<
-syntax です。
int i = 0;
std::cout << "this is a number: " << i;
また、整数、浮動小数点数などのフォーマット、桁数などに影響を与えるために使用できるさまざまなIO マニピュレータがあります。
ただし、これは のフォーマットされた文字列と同じではありませんprintf
。C++11 には、文字列の書式設定を使用するのと同じ方法で使用できる機能は含まれていませんprintf
(もちろん、必要に応じて C++ で使用できる機能自体を除きprintf
ます)。
printf
スタイルの機能を提供するライブラリに関してはboost::format
、次のようなコードを有効にする があります (概要からコピー)。
std::cout << boost::format("writing %1%, x=%2% : %3%-th try") % "toto" % 40.23 % 50;
また、標準の将来のバージョンに-style フォーマットを含める提案があることにも注意してください。printf
これが受け入れられると、次のような構文が利用可能になる可能性があります。
std::cout << std::putf("this is a number: %d\n",i);
cout の型安全性と、printf() の単純な変数の迅速かつ簡単な書式設定の両方が必要な場合は、この 2 つをこのように組み合わせます。これは醜い修正ですが、「02/07/2014 10:05am」のようなものをいくつかのより複雑なエンティティと一緒に出力する必要がある場合は、これでうまくいきます。
#include <stdio>
#include <stdarg>
#include <stdlib>
#include <iostream>
#pragma hdrstop
using namespace std;
char* print(char* fmt, ...)
{
static char buffer[80] = "";
va_list argptr;
va_start(argptr,fmt);
vsprintf(buffer, fmt, argptr);
va_end(argptr);
return buffer;
}
#pragma argsused
int main(int argc, char* argv[])
{
cout << print("\n%06d\n%6d\n%6d\n%010.3f",1,12,123,123.456);
system("PAUSE>NUL");
return 0;
}