读书人

C++Primer 练习4.34,该怎么处理

发布时间: 2012-04-09 13:41:25 作者: rapoo

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=引用:]

C/C++ code
 //注意以下两句 string **ptr=new string*[vec.size()]; // (**ptr)等价于string 其中的(*ptr)存储是的地址 ptr[ix]=p; //因而赋值的时候因该是 (*ptr)[ix]=p;//p存储的是地址
[解决办法]
探讨
多谢2楼
不过能不能解释一下是怎么实现的呢?
看着指针的操作有点晕乎

[解决办法]
C/C++ code
#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;} 

读书人网 >C++

热点推荐