例:编写程序读入一组 string 类型的数据,并将它们存储在 vector 中。显示出vector的内容。接着,把该 vector 对象复制给一个字符指针数组。为 vector 中的每个元素创建一个新的字符数组,并把该 vector 元素的数据复制到相应的字符数组中,最后把指向该数组的指针插入字符指针数组。最后显示出字符数组的内容.
编写此题难点在于字符指针数组。
现画如下模型:
parry --> parry[0] --> "aaafwaea"
parry[1] --> "bbbfweb"
parry[2] --> "ccwfccc"
parry[3] --> "ddddd"
parry[4] --> "aaafsdf"
parry[5] --> "aasaasaf"
. .
. .
. .
因此要在堆上分配两次空间...代码如下:
#include <iostream>
#include <vector>
using std::vector;
#include <string>
using std::string;
using std::cout;
using std::cin;
using std::endl;
int main()
{
//读入一组strings,并存储到svec中。
string word;
vector<string> svec;
cout<<"Enter string, enter 'ctrl+z' to quit;"<<endl;
while (cin>>word)
{
svec.push_back(word);
}
//输出此svec的内容
cout<<"The strings in the vector are :"<<endl;
for (vector<string>::iterator iter=svec.begin();iter!=svec.end();++iter)
{
cout<<*iter<<" ";
}
cout<<endl<<endl;
//创建一个字符指针数组
cout<<"Create an array of character pointer..."<<endl;
char **parr= new char *[svec.size()];
size_t ix=0;
for (vector<string>::iterator iter=svec.begin();iter!=svec.end();++iter,++ix)
{
//创建字符数组
char *p=new char [(*iter).size()+1];
strncpy(p,(*iter).c_str(),(*iter).size());//string的character不用自己加null
parr[ix]=p; //若为c-style加1
}
cout<<endl<<"The content of character pointer are:"<<endl;
for (ix=0;ix!=svec.size();++ix)
{
cout<<parr[ix]<<" ";
}
//释放每个字符数组
for (ix=0;ix<svec.size();++ix)
{
delete [] parr[ix];
}
//释放字符指针数组
delete [] parr;
getchar();
getchar();
return 0;
}