如何正确使用C++中的ostringstream?

26

我尝试在调用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"

第二个输出结果应该为

"产品名称:电影票 剩余数量:26 价格:9.99 收入:$239.76"

我知道这只是一个更新的问题,但我不知道该怎么做。

1个回答

54

toString()函数内声明int_bufferfloat_bufferfloat_buffer2。因为你是在类中声明,所以这些对象会一直存在,每次调用toString()函数时,你都会重复地将其连接到int_bufferfloat_bufferfloat_buffer2中。如果你在方法内部声明它们,它们只会在toString函数处于活动状态时存在。无论如何,你的代码做得太多了,你可以简单地这样做:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接