我正在使用向量通过使用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;
}
答案 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;
}