1. 程式人生 > >C++->string與數值型別的拼接

C++->string與數值型別的拼接

從Java和C#轉到C++的程式猿經常會碰到這樣的問題,string與int型拼接,直接使用+號。

但是,在C++中,你會發現這樣使用後會出現很奇怪的問題。本人在g++ 4.8.2中,編譯時報錯,說沒有string與int匹配的operator+。之前用過一個g++是沒有報錯的,執行時出現亂碼。由於不能再接觸那臺機器,所以無法考核那個g++的版本。

那麼C++怎麼拼接string和數值型別呢?

以下是本人的一個想法,對於有沒有更高效的做法,還沒考察到。如果有讀者有更好的演算法,歡迎告知。

大家都知道流操作可以處理所有過載了operator<<和operator>>的型別。對於數值型別也一樣,流能正確地將數值型別寫入到流中,或者從流中讀取數值型別。要處理string,自然能想到的就是stringstream了。

下面以string為例,對於wstring也是一樣的處理。

template <typename T1, typename T2>
string concat(const T1 &v1, const T2 &v2)
{
    stringstream ss;
    ss << v1 << v2;
    return ss.str();
}

可以發現,這樣的處理,只有是任何過載了opertor<<的型別都支援字串的拼接。第一個引數也不必是string。