2010-01-18 89 views
4

我想創建一個包含許多變量的字符串:創建包含多個變量的大字符串的最佳方法?

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

這應該產生一個句子讀

弗蘭克和喬坐下來與南希打牌,而夏洛克演奏小提琴。

我的問題是:什麼是最佳的方式來實現這一目標?我擔心不斷使用+運算符是無效的。有沒有更好的辦法?

回答

7

是,std::stringstream,例如:

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

我在過去的幾個月裏至少應該提到這個答案10次。出於某種原因,我一直忘記。如果我能夠更多地讚揚你,我會的。 :) – Runcible 2011-08-10 18:36:16

0

您可以撥打臨時工就像operator+=成員函數。不幸的是,它具有錯誤的關聯性,但我們可以用括號來修正它。

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

這是一個有點醜,但它不涉及任何不需要的臨時工。

2

你可以使用boost ::格式如下:

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 
) 

這就是提升的一個很簡單的例子::格式可以做,這是一個非常強大的庫。

相關問題