2012-07-13 78 views
1

是否有更優雅的方式來初始化第二個字符串與第一個字符串中的單個字符?例如。而不訴諸於字符串(size_t n,char c)構造函數?最優雅的方式來初始化一個字符串與另一個字符串中的單個字符

string first = "foobar"; 
string second(string(1, first[0])); 
+0

你爲什麼連施工兩次?將字符串(...)'部分留在第二個字符串中。 – Xeo 2012-07-13 16:07:09

+0

使用該構造函數不雅的是什麼? – 2012-07-13 16:07:31

+0

既然你已經有了'(1,first [0])'作爲構造函數的參數,爲什麼不用它來構造'second'? – Shahbaz 2012-07-13 16:09:09

回答

9

您提到的構造函數從一個字符創建字符串的方式,所以不會有更好的方法。然而,有沒有必要創建和複製/移動臨時:

string second(1, first[0]); 

或者,你可以從first一個子建:

string second(first, 0, 1); 

在C++ 11,你可以使用一個初始化器清單:

string second {first[0]}; 
6

什麼:

string (); 
string (const string& str); 
string (const string& str, size_t pos, size_t n = npos); 
string (const char * s, size_t n); 
string (const char * s); 
string (size_t n, char c); //<<--- this 

string second(1, first[0]); 

注意上面的是你的初始化唯一的選擇。

+0

真的嗎?爲什麼downvote? – 2012-07-13 16:07:03

+1

我沒有看到downvoting的原因; +1賠償。 – 2012-07-13 16:09:04

+2

我沒有downvote,但我認爲這是因爲問題說「不訴諸字符串(size_t n,char c)構造函數?」 – 2012-07-13 16:09:48

1

我建議你:

string first = "foobar"; 
string second; 
second = first[0]; 
+1

比'string second(1,first [0])好得多;' – Shahbaz 2012-07-13 16:07:58

+1

@Shahbaz只是它不工作! – 2012-07-13 16:08:37

+2

除非它不編譯,因爲沒有'string(char c)'構造函數:http://ideone.com/KyOFg。 – Xeo 2012-07-13 16:08:39

相關問題