Question

Je veux créer une chaîne qui contient de nombreuses variables:

std::string name1 = "Frank";
std::string name2 = "Joe";
std::string name3 = "Nancy";
std::string name4 = "Sherlock";

std::string sentence;

sentence =   name1 + " and " + name2 + " sat down with " + name3;
sentence += " to play cards, while " + name4 + " played the violin.";

Cela devrait produire une phrase qui se lit

Frank et Joe se sont assis avec Nancy pour jouer aux cartes, tandis que Sherlock jouait du violon.

Ma question est: Quelle est la meilleure façon d'y arriver? Je crains que l'utilisation constante de l'opérateur + est ineffecient. Y at-il une meilleure façon?

Était-ce utile?

La solution

Oui, std::stringstream, par exemple:.

#include <sstream>
...

std::string name1 = "Frank";
std::string name2 = "Joe";
std::string name3 = "Nancy";
std::string name4 = "Sherlock";

std::ostringstream stream;
stream << name1 << " and " << name2 << " sat down with " << name3;
stream << " to play cards, while " << name4 << " played the violin.";

std::string sentence = stream.str();

Autres conseils

Vous pouvez utiliser boost :: format pour ceci:

http://www.boost.org/doc /libs/1_41_0/libs/format/index.html

std::string result = boost::str(
    boost::format("%s and %s sat down with %s, to play cards, while %s played the violin")
      % name1 % name2 % name3 %name4
)

Ceci est un exemple très simple de ce coup de pouce :: format peut faire, il est une bibliothèque très puissante.

Vous pouvez appeler des fonctions membres comme operator+= sur temporaires. Malheureusement, il a le mal associativité, mais nous pouvons résoudre ce problème avec les parenthèses.

std::string sentence(((((((name1  +  " and ")
                        += name2) += " sat down with ")
                        += name3) += " to play cards, while ")
                        += name4) += " played the violin.");

Il est un peu laid, mais il ne comporte pas de non nécessaires temporaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top