C++Primer 练习4.34
/*
读入一组string类型的数据,并将它们存贮在vector中。
接着,把该vector对象赋值给一个字符指针数组。
把vector中的每个元素创建一个新的字符数组。
并把该vector元素的数据复制到相应的字符数组中。
最后我把指向该数组的指针插入字符指针数组。
*/
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
vector<string> vec;
string str;
while(cin>>str)
{
vec.push_back(str);
}
string **ptr=new string*[vec.size()];
size_t ix=0;
for(vector<string>::iterator iter=vec.begin();iter!=vec.end();++iter,++ix)
{
char *p=new char[(*iter).size()+1];
strcpy(p,(*iter).c_str());
ptr[ix]=p;
}
for(ix=0;ix!=vec.size();++ix)
delete [] ptr [ix];
delete [] ptr;
system("pause");
return 0;
}
1.书上的源代码贴在上面却编译不过,为什么啊?
2.这个程序关于字符指针数组的操作那部分没有懂,那位好心人帮忙讲解一下,谢谢!
[解决办法]
[Quote=引用:]
//注意以下两句 string **ptr=new string*[vec.size()]; // (**ptr)等价于string 其中的(*ptr)存储是的地址 ptr[ix]=p; //因而赋值的时候因该是 (*ptr)[ix]=p;//p存储的是地址
[解决办法]
#include <iostream>#include <string>#include <vector>using namespace std;int main(){ vector <string> vec; string str; while(cin>>str) { vec.push_back(str); } string *ptr=new string[vec.size()]; // string*指向string[]数组首元素, 在这里没必要string** size_t ix=0; for(vector <string>::iterator iter=vec.begin();iter!=vec.end();++iter,++ix) { char *p=new char[(*iter).size()+1]; strcpy(p,(*iter).c_str()); ptr[ix]=p; } for(ix=0;ix!=vec.size();++ix)// delete[] ptr[ix]; cout<<"string "<<ix+1<<": "<<ptr[ix]<<endl; //测试一把 delete [] ptr; // free string[] system("pause"); return 0;}