web-dev-qa-db-fra.com

Comment utiliser correctement ostringstream en c ++?

J'essaie de renvoyer certaines informations lorsque ma méthode toString () est appelée, qui incluent un entier et quelques flottants. J'ai appris que ostringstream fonctionne très bien, mais lorsque la classe qui contient cette méthode est appelée maintes et maintes fois, les informations sont empilées sur ma sortie précédente. Voici mon code

    ostringstream int_buffer, float_buffer, float_buffer2;

est présenté au début de ma classe, puis

    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;
    }

Je sais que mon codage est horrible, je suis encore assez nouveau, mais un exemple de ma sortie est,

"Nom du produit: Ticket de cinéma Unités restantes: 49 Prix: 9,99 Revenu: 9,99 $"

"Nom du produit: Movie Ticket Unités restantes: 4926 Prix: 9.999.99 Revenu: 9.99239.76 $"

où le deuxième devrait afficher

"Nom du produit: Ticket de cinéma Unités restantes: 26 Prix: 9,99 Revenu: 239,76 $"

Je sais que c'est juste une question de mise à jour, mais c'est là que je suis perdu.

16
Arminium

Déclarez int_buffer, float_buffer Et float_buffer2 À l'intérieur de la fonction toString(). Parce que vous déclarez dans la classe, ces objets sont conservés, donc chaque fois que vous appelez la fonction toString() vous concaténez à int_buffer, float_buffer Et float_buffer2 encore et encore. Si vous déclarez à l'intérieur de la méthode, ils n'existeront que lorsque toString sera actif. Quoi qu'il en soit, vous faites trop de code pour ce que vous essayez de faire. Vous pourriez simplement faire:

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