2014-10-17 118 views
0

我想將編號的對象輸入到數組中。每個對象的元素必須根據其在陣列上的位置進行編號。我無法弄清楚爲什麼字符串索引在循環繼續時轉換時保留了以前的值。例如, 。第一個地方是0,隨着循環的進行,變成01,012,0123等等。 這裏的那部分代碼我有從int到字符串的轉換

stringstream convert; 
    int N; 
    int k; 
srand ((long) 123456); 
N=rand()%100+1; 
NewTable=new Employee[N]; 


for(k=0;k<N;k++){ 
    string name,surname,number=""; 
    convert<<k; 
    number=convert.str(); 
    cout<<number; 
    name="John_"+number; 
    surname="John_"+number; 
    NewTable[k].SetEmployee(name,surname,13*k,3*k);*/ 

問題}

我還認爲,通過在循環的開始重新初始化數字的字符串時,它會解決這個問題,但它沒「T。

回答

0

你不clearing the stringstream buffer,因此在每次迭代

for (k = 0; k<N; k++){ 
    string name, surname, number = ""; 
    convert.str(""); // You should reset its contents 
    convert << k; 
    number = convert.str(); 

編輯附加的東西吧:或者,如詹姆斯指出,這可能是更好的每一次重新創建stringstream的,如果有更多的參與(此外,您只張貼的代碼片段):

for (k = 0; k<N; k++){ 
    string name, surname, number = ""; 
    std::ostringstream convert; 
    convert << k; 
    number = convert.str(); 
+0

這是不是100%當然;比流中的狀態更多。最好的解決方案是每次在循環中創建一個新的'std :: ostringstream'。 – 2014-10-17 09:17:43

+0

我決定在每個循環中創建一個新的std :: ostringstream。謝謝你的答案 – 2014-10-17 09:27:51

0

如果你想在循環處女std::ostringstream各一次,然後就創建一個新的每次循環。雖然從理論上講,你可以重置所有東西以使流回到處女狀態,但這並不是微不足道的,也不一定100%確定。最簡單的就是:

for (int k = 0; k < N; ++k) { 
    std::ostringstream convert; 
    convert << k; 
    std::string number = convert.str(); 
    // ... 
} 

(一般情況下,最好不要定義一個變量,直到你 需要它,而且在定義立即對其進行初始化。)