web-dev-qa-db-ja.com

C ++でostringstreamを適切に使用するにはどうすればよいですか?

ToString()メソッドが呼び出されたときに、整数といくつかの浮動小数点を含むいくつかの情報を返そうとしています。私はostringstreamがうまく機能することを学びましたが、このメソッドを含むクラスが何度も呼び出されると、情報が以前の出力に積み重ねられます。これが私のコードです

    ostringstream int_buffer, float_buffer, float_buffer2;

クラスの最初に紹介されてから

    string toString()
    {

        int_buffer << on_hand;
        float_buffer << price;
        float_buffer2 << generated_revenue;

        string stron_hand = int_buffer.str();
        string strprice = float_buffer.str();
        string strrev = float_buffer2.str();

        string output = "Product name: " + description + " Units left: " + stron_hand + " Price: " + strprice + " Revenue: $" + strrev;
        return output;
    }

私のコーディングはひどいことはわかっていますが、私はまだこれからかなり新しいですが、私の出力の例は、

「商品名:映画チケットの残り枚数:49枚価格:9.99収益:9.99ドル」

"商品名:映画チケットの残り:4926価格:9.999.99収益:$ 9.99239.76"

2番目のものが表示される場所

「商品名:映画チケットの残り枚数:26枚価格:9.99収益:239.76ドル」

それはアップデートの問題だと知っていますが、それは私が失われた場所です。

16
Arminium

_int_buffer_、_float_buffer_、_float_buffer2_をtoString()関数内で宣言します。クラスで宣言しているため、これらのオブジェクトは保持されているため、toString()関数を呼び出すたびに、_int_buffer_、_float_buffer_、および_float_buffer2_に連結されますオーバー。メソッド内で宣言すると、toStringがアクティブな間のみ存在します。とにかく、あなたはあなたがやろうとしていることに対してあまりにも多くのコードをやっています。あなたは単に行うことができます:

_std::string toString()
{
    std::ostringstream buffer; 
    buffer << "Product name: "<< description << " Units left: " << on_hand << " Price: "<< price << " Revenue: $" << generated_revenue;
    return buffer.str();
}
_
35
André Oriani