我需要編寫一個函數concat
像:C++:函數concats其所有參數作爲字符串
std::string concat(...);
接受任何數量的參數變化類型(字符,字符*,INT,STD的 : :string,...) 並返回它們的連接。例如:
concat(88,'a',"home",9) == std::string("88ahome9")
我需要編寫一個函數concat
像:C++:函數concats其所有參數作爲字符串
std::string concat(...);
接受任何數量的參數變化類型(字符,字符*,INT,STD的 : :string,...) 並返回它們的連接。例如:
concat(88,'a',"home",9) == std::string("88ahome9")
您可以使用以下:
template<typename ... Ts>
std::string concat(Ts&&...args)
{
std::stringstream ss;
const int dummy[] = {0, (ss << std::forward<Ts>(args), 0)...};
static_cast<void>(dummy); // avoid warning for unused variable
return ss.str();
}
或C++ 17,與摺疊表達
template<typename ... Ts>
std::string concat(Ts&&...args)
{
std::stringstream ss;
(ss << std::forward<Ts>(args) << ...);
return ss.str();
}
有趣的做法擴大。如果任意表達式可以擴展爲一系列逗號運算符,那麼會很好:'(ss << std :: forward
很好,但我正在尋找一個解決方案在c + + 03 –
所以這個要求應該在問題中說明。 – Jarod42
你可以使用ostringstream在sstream庫中轉換函數。
你會從一行開始,如
ostringstream convert;
與< <操作者然後轉換您希望(或>>從字符串轉換)的變量,如:
INT VAR = 98;
convert < < var;
然後儲存這個字符串中的:
字符串結果;
result = convert.str();
該字符串現在將包含您的int的內容!
Ofc您可以使用if語句將輸入區分爲字符,整數等。並結合所有字符串以結尾。
btw對不起,拼寫和格式,在手機上xD
你嘗試了什麼? – SirDarius
這是兩個問題的組合。 1)如何在函數調用中允許不同數量的參數。 [見這裏](http://stackoverflow.com/questions/1657883/variable-number-of-arguments-in-c)。 2)如何連接各種字符串類型。這個問題是非常基本的,如果你搜索,有幾十個例子在線。 – CoryKramer
您可能想了解[template prameter packs](http://en.cppreference.com/w/cpp/language/parameter_pack)和['std :: ostringstream'](http://en.cppreference.com/W/CPP/IO/basic_ostringstream)。 –