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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top