我正在学习C++,书中有一个问题。
问:编写一个程序,用于定义指向字符串的指针向量。读取向量, 打印每个字符串及其相应的大小。
法典:
vector<string*> v;
string str;
cout<<"Enter your string:"<<endl;
while(cin >> str) // input
{
string *ps=&str;
v.push_back(ps);
}
vector<string*>::iterator iter=v.begin();
while( iter!=v.end()) // output
cout<< **iter++<<" "<<(**iter).size()<<endl;
当我输入"a sd fgh"时,我希望输出为"a 1;SD 2;FGH 3";但输出是"FGH 3;FGH 3;FGH 3." 有谁知道哪里出了问题?
你会得到相同的输出,因为你所有的字符串都指向同一个地方 - 即你的str
变量。您应该使用缓冲区str
的数据创建新字符串,如下所示:
std::string *ps = new string(str);
执行此操作后,当您不再需要字符串时,不要忘记删除通过在函数末尾的每个字符串指针上调用 delete ptr
来分配的字符串。
>我会给你一个线索:std::string *ps = &str
是一个非常糟糕的主意。每个指针都需要自己的内存。