2013-01-12 77 views
0

我有一個向量:如何在以字符串流把字符串

vector<stringstream*> ssv; 
for (int i = 0; i < cIter; i++) { 
    ssv.push_back(new std::stringstream); 
} 

我怎麼可以把矢量SSV字符串的元素?

我嘗試:

string s1 = "easfef" + '\n'; 
int i = 0; 
*ssv[i] << s1 << '\n'; 

但它給我一個空字符串:

string sdf = ssv[i]->str(); 

我該怎麼辦呢?

感謝您與「\ n」幫助,但還是老樣子與向量的一個問題: 如果我寫:

std::string s1 = "qwerqwr\n"; // for example 
int i = 0; 
*ssv[i] << s1; 

但請給我一個空字符串作爲前

string sdf = ssv[i]->str(); 
+0

' 「easfef」 +「\ n''不好。 – chris

+0

你爲什麼要在向量中存儲stringstream? – billz

+0

爲什麼使用'stringstream'指針? –

回答

3

你主要問題是你如何初始化字符串:

"easfef" + '\n' 

"easfef"衰減爲const char *並且'\n'被提升爲值爲10的int(假設爲ASCII)。然後,將這兩者加在一起,這會產生一個指向字符串文字之外的指針。碰撞是非常可能的,伴隨着你的母親被恐龍吃掉。

一個簡單的方法來解決這個問題,是執行std::string

std::string s1 = std::string("easfef") + '\n'; 

更簡單的方法是內聯換行符:

std::string s1 = "easfef\n"; 
+0

+1 - '崩潰是非常可能的,伴隨着你的母親被恐龍吃掉。「 - 只是,哈哈:D – webnoob

+0

@webnoob,我沒有遺憾。 – chris

+0

好,你已經盡了一切辦法來拯救他母親從那可怕的恐龍.. – webnoob

2

在你的代碼

string s1 = "easfef" + '\n'; 

初始化表達式在實踐中計算爲

"easfef" + 10; 

這是一個指向字符串第11個字符的指針。

但是沒有這樣的,所以你有未定義的行爲


修復:

string s1 = string() + "easfef" + '\n'; 

這就是說,指針到stringstream矢量幾乎certainbly不切實際的解決方案,任何問題,你正在試圖解決的問題。

嘗試描述更高級別的問題。

+0

爲什麼你會選擇構建一個空的臨時字符串,並將其添加到「easfef」,生成另一個臨時字符串,而不是構造一個臨時字符串easfef作爲構造函數參數?爲什麼不建議將'\ n'常量放入字符串? – Agentlien

+0

@Agentlien,它可能沒有跨越他的想法。我沒有意識到這是一個字符串加一個字符,直到我輸入我的第一個建議。 – chris

+0

好吧,我嘗試解決來自http://en.wikipedia.org/wiki/External_sorting的項目4-5,其中我的元素 - 來自.txt文件的字符串 –

0

在C++字符串文字的字符陣列和陣列可以被視爲指針,和字符像「\ n」可以被視爲數字,所以"easfef" + '\n'被解釋爲指針算術運算。

你應該寫:

string s1 = "easfef"; 
s1 += '\n';