méthode optimale pour créer une grande chaîne contenant plusieurs variables?
-
21-09-2019 - |
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?
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.