6

私はすでにこれを知っているはずですが...printfそのままですか? 例を挙げてください。sprintfcout____

4

5 に答える 5

13

を探しているようですねstd::ostringstream

もちろん、C++ ストリームは、C のprintf()-type 関数のようなフォーマット指定子を使用しません。彼らは使用しますmanipulators

要求に応じた例:

#include <sstream>
#include <iomanip>
#include <cassert>

std::string stringify(double x, size_t precision)
{
    std::ostringstream o;
    o << std::fixed << std::setprecision(precision) << x;
    return o.str();
}

int main()
{
    assert(stringify(42.0, 6) == "42.000000");
    return 0;
}
于 2011-05-06T23:55:17.667 に答える
1
 std::ostringstream

これを使用して、Boost レキシカル キャストのようなものを作成できます。

#include <sstream>
#include <string>

template <typename T>
std::string ToString( const T & t ) {
    std::ostringstream os;
    os << t;
    return os.str();
}

使用中で:

string is = ToString( 42 );      // is contains "42"
string fs = ToString( 1.23 ) ;   // fs contains something approximating "1.23"
于 2011-05-06T23:49:06.640 に答える
1
#include <iostream>
#include <sstream>

using namespace std;

int main()
{
    ostringstream s;
    s.precision(3);
    s << "pi = " << fixed << 3.141592;
    cout << s.str() << endl;
    return 0;
}

出力:

pi = 3.142
于 2011-05-07T00:00:04.230 に答える
1

次に例を示します。

#include <sstream>

int main()
{
    std::stringstream sout;
    sout << "Hello " << 10 << "\n";

    const std::string s = sout.str();
    std::cout << s;
    return 0;
}

再利用のためにストリームをクリアしたい場合は、次のことができます

sout.str(std::string());

Boost Formatライブラリも参照してください。

于 2011-05-07T00:08:37.707 に答える
-1

あなたは、cout の概念について少し誤解しています。cout はストリームであり、演算子 << は任意のストリームに対して定義されています。したがって、データを出力するには、文字列に書き込む別のストリームが必要です。std::ostringstream のような標準ストリームを使用するか、独自のストリームを定義できます。

cout は printf や sprintf のような関数ではないため、類推はあまり正確ではありません

于 2011-05-06T23:51:27.007 に答える