Optimale Verfahren eine große Zeichenfolge enthält mehrere Variablen zu erstellen?
-
21-09-2019 - |
Frage
Ich möchte einen String erstellen, die viele Variablen enthält:
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.";
Dies sollte einen Satz erzeugt, liest
Frank und Joe setzte sich mit Nancy verdeckten Karten zu spielen, während Sherlock die Geige gespielt.
Meine Frage ist: Was ist der optimale Weg, dies zu erreichen? Ich bin besorgt darüber, dass ständig die + Operator ist effizient ist. Gibt es einen besseren Weg?
Lösung
Ja, std::stringstream
, z.
#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();
Andere Tipps
könnten Sie boost :: Format für diese:
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
)
Dies ist ein sehr einfaches Beispiel dafür, was boost :: Format tun, ist es eine sehr leistungsfähige Bibliothek.
Sie können Member-Funktionen wie operator+=
auf Provisorien nennen. Leider hat es die falsche Assoziativität, aber wir können das in Ordnung bringen mit Klammern.
std::string sentence(((((((name1 + " and ")
+= name2) += " sat down with ")
+= name3) += " to play cards, while ")
+= name4) += " played the violin.");
Es ist ein wenig hässlich, aber es hat keine nicht benötigten Provisorien einzubeziehen.