<character *>仅使用cin附加最后一个输入

时间:2016-02-19 20:15:42

标签: c++ loops vector

我正在使用向量通过使用cin获取用户输入来在数组中存储char*。输入是在循环中接收的,一切正常,直到我显示输入。放在向量中的最后一个元素显示在所有索引中。如果我把字符串“hello”“world”“this”“用”C ++“在循环中使用cin。输出为”C ++“ “5次。

代码如下。

#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

2 个答案:

答案 0 :(得分:2)

vec.push_back(str);

你一遍又一遍地向矢量添加相同的地址。

你需要移动它:

char *str=new char[10];

在循环中。

然后不要忘记在每个向量元素上调用delete

正如评论中所述,std::string可能是更好的选择。

答案 1 :(得分: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;
}