2011-12-20 47 views
9

如何做整數 - >字符串轉換已經在互聯網上多次回答...但是,我正在尋找最緊湊的「C++ - 方式」來做到這一點。整數到字符串轉換/整數字符串連接在C + + - 更緊湊的解決方案?

既然你能串聯使用重載+操作字符串,這將是最好能夠做到沿蟒蛇上下的 X =(stringVariable + STR(了IntVariable))級聯線的東西,但我不知道是否有一種規範的方式來在C++中執行此操作。

最常見的解決方案,我看到的是:

字符串流:如果可能的話,這將是很好不要有3行代碼(聲明,寫入數據流,轉換爲字符串)只是來連接一些字母和數字。這個工作,但我正在尋找一個規範的C++解決方案。另外,我認爲itoa在技術上是非標準的,儘管我可能是錯的。

提升格式/提升詞法演員:這個工作也可以,但是在香草C++中沒有任何工作可以做?

+3

請注意,stringstreams實際上完成這項工作。提示:不要發明(非)問題。 :) – Kos 2011-12-20 14:55:00

+1

@Kos只是我的寵物,但它的'std :: ostringstream'在這裏完成這項工作。 – 2011-12-20 14:57:59

+0

@JamesKanze:爲了真正挑剔,轉換的實際工作是在ostreams的相應'operator <<'中完成的。 – PlasmaHH 2011-12-20 15:03:18

回答

17
#include <string> 

字符串到整數:int n = std::stoi(s);

整數到字符串:std::string s = std::to_string(n);

+0

酷,但我還不知道另一個新功能(值得一提的是,它正式不到1歲,一些編譯器或編譯器用戶可能還沒有趕上!)。 – Kos 2011-12-20 15:00:42

+0

@Kos:官方它是3.5個月大;)(2011-09-01) – PlasmaHH 2011-12-20 15:01:52

+0

C++ 11使我的代碼更加易於維護。希望成爲早期的採用者不會回頭咬我(在編譯器支持,公司編碼標準等方面)。 – daj 2011-12-20 15:19:13

0

什麼是與有3條線轉換的事?如果您需要隨時使用相同類型的連接,只需將其放入函數中即可。這會比使用奇怪的解決方案更好。

2

stringVariable + boost::lexical_cast<std::string>(intVariable)會做的伎倆,但我不知道這是一個好主意。即使在Python中,類似'{}{:6f}'.format(stringVariable, intVariable)的東西也會更加平常。

4

C++ 11有std::to_string,但在C++ 03中沒有「單一函數調用方案」。 boost::lexical_cast(雖然專門爲某些情況下)和std::to_string最終呼籲operator<<(std::ostream&,T)任何他們應該轉換。這是關於能夠一般地處理事情,並且當op<<已經存在時,爲什麼不重用它來創建字符串表示?