50

私はC++を学んでいます。クラスcoutのインスタンスです。std::ostreamフォーマットされた文字列を印刷するにはどうすればよいですか?

私はまだ使用できますprintfが、すべてのC++の利点を活用できる適切なC++メソッドを学びたいと思います。これはで可能だと思いますstd::ostreamが、適切な方法が見つかりません。

4

9 に答える 9

36

直接できる唯一のこと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);
于 2013-02-27T07:13:56.093 に答える
-1

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;

}
于 2014-02-07T10:24:14.983 に答える