2016-02-19 18 views
-1

我正在使用向量來將char*存儲在數組中,方法是使用cin獲取用戶輸入。輸入被循環接收,一切正常,直到我顯示輸入。放在向量中的最後一個元素顯示在所有的索引中.ie.if如果我在循環中使用cin將字符串「hello」「world」「this」「是」C++「,輸出爲」C++ 「5倍。<character*>只能追加使用cin的最後一個輸入

的代碼如下。

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    char *str=new char[10]; 
    vector<char*> vec; 
    int i=0; 

    for(i=0; i<5; i++) 
    { 
     cout<<"Enter string: "; 
     cin>>str; 
     vec.push_back(str); 
    } 

    for(i=0; i<5; i++) 
    { 
     cout<<vec[i]<<" "; 
    } 

    return 0; 
} 

Screenshot of the code when ran

+3

使用的std :: string代替字符* –

回答

2

您將覆蓋每個輸入的字符串。

char *str=new char[10]; 

創建一個c樣式的字符串。然後

cin>>str; 

填充它的內容。當你這樣做時

vec.push_back(str); 

你複製一個指向該字符串的指針並將其放入向量中。然後,當您再次循環時,它將用您接下來輸入的內容覆蓋str。由於所有的矢量元素仍然指向相同的字符串,它們都將具有相同的數據。

你需要什麼是std::string,然後你可以使用

int main() 
{ 
    std::string str; 
    vector<std::string> vec; 
    int i=0; 

    for(i=0; i<5; i++) 
    { 
     cout<<"Enter string: "; 
     cin>>str; 
     vec.push_back(str); 
    } 

    for(i=0; i<5; i++) 
    { 
     cout<<vec[i]<<" "; 
    } 

    return 0; 
} 
+0

謝謝你,這也工作.. – Hawk

2
vec.push_back(str); 

你一遍又一遍地把相同的地址矢量。

你將需要移動這個:

char *str=new char[10]; 

裏面的循環。

然後不要忘記在每個向量元素上調用delete

正如評論中所述,std::string可能是更好的選擇。

+0

有反正我可以在不修改同一地址添加數據? – Hawk

+0

@Hawk增加了建議,但你最好使用字符串類,而不是 –

+0

謝謝,它實際上工作,我會盡快接受你的答案.. – Hawk