il metodo ottimale per creare una stringa di grandi dimensioni che contiene diverse variabili?

StackOverflow https://stackoverflow.com/questions/2083200

Domanda

Voglio creare una stringa che contiene molte variabili:

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.";

Questo dovrebbe produrre una frase che dice

Frank e Joe seduti con Nancy a giocare a carte, mentre Sherlock suonava il violino.

La mia domanda è: Qual è il modo ottimale per raggiungere questo obiettivo? Sono preoccupato che costantemente utilizza l'operatore + è ineffecient. C'è un modo migliore?

È stato utile?

Soluzione

Sì, std::stringstream, per esempio:.

#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();

Altri suggerimenti

Si potrebbe usare boost :: formato per questo:

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
)

Si tratta di è un esempio molto semplice di ciò che boost :: formato può fare, è una libreria molto potente.

È possibile chiamare le funzioni membro come operator+= sul provvisori. Purtroppo, ha l'associatività sbagliato, ma possiamo rimediare con parentesi.

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

E 'un po' brutto, ma non comporta alcun temporanei non necessari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top