Best way to create a large string containing multiple variables?

I want to create a string containing many 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."; 

This should trigger a sentence that reads

Frank and Joe sat down with Nancy to play cards, and Sherlock played the violin.

My question is: what is the best way to achieve this? I am concerned that continued use of the + operator is inefficient. Is there a better way?

+4
source share
3 answers

Yes, std::stringstream , for example:

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

To do this, you can use the boost format ::

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 ) 

This is a very simple example of what formatting :: format can do, it is a very powerful library.

+2
source

You can call member functions such as operator+= in time series. Unfortunately, it has the wrong associativity, but we can fix it with parentheses.

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

This is a little ugly, but there are no unnecessary time series in it.

0
source

All Articles