C++Primer 4.34习题代码

来源:互联网 发布:暗黑血统2优化补丁 编辑:程序博客网 时间:2024/06/07 05:48

My code:

#include<iostream>

#include<vector>
#include<string>
#include<cstring>
using namespace std;

int main()
{
    vector<string> svec;
    string str;
    cout << "Enter strings:(Ctr+Z to end)" << endl;
    while(getline(cin, str))            //输入vector元素
        svec.push_back(str);
    const int row = 100, column = 100;
    char a[row][column];
    char pointer[row][column];       //存放指针数组
    /*

                    //-----------------测试通过------------------
        cout << "---------------------迭代器---------------------" << endl;
        vector<string>::size_type index = 0;
        for(vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter, ++index)
            strcpy(*(a+index), (*iter).c_str());  //将vector的对象复制给指针数组;注意此处(*iter).c_str()中圆括号不能省略,
        cout << "The svec is: " << endl;    //因点操作符的优先级高于解引用操作符,否则程序会崩溃;另外,必须用.c_str()函数返回C风格字符串
        for(vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter)
            cout << *iter << "\t";              //输出容器
        cout << endl << "The array is: " << endl;
        //cout << svec.end()-svec.begin() << endl;
        for(vector<string>::size_type ix = 0; ix < svec.end()-svec.begin(); ++ix)
            cout << a[ix] << "\t";
        cout << endl;
*/
    //-----------------测试通过------------------
    cout << "----------------------下标---------------------" << endl;
    for(vector<string>::size_type ix = 0; ix != svec.size(); ++ix)
    {
        strcpy(a[ix], svec[ix].c_str());                //将vector的对象复制给指针数组
        strcpy(pointer[ix] , a[ix]);                    //此处a[ix]可换为*(a+ix)
    }
    cout << "The svec is: " << endl;
    for(vector<string>::size_type ix = 0; ix != svec.size(); ++ix)
        cout << svec[ix] << "\t";               //输出容器
    cout << endl << "The array is: " << endl;
    for(vector<string>::size_type ix = 0; ix != svec.size(); ++ix)
        cout << a[ix] << "\t";                  //输出字符数组
    cout << endl << "The pointer is: " << endl;
    for(size_t ix = 0; ix != svec.size(); ++ix)
        cout << pointer[ix] << "\t";


    return 0;
}

//参考答案
/*
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;

int main()
{
    vector<string> svec;
    string str;
    cout << "Enter strings:(Ctr+Z to end)" << endl;
    while(cin >> str)               //输入vector元素
        svec.push_back(str);
    char **parr = new char*[svec.size()];   //创建字符指针数组
    size_t ix = 0;
    for(vector<string>::iterator iter = svec.begin(); iter != svec.end(); ++iter, ++ix)     //处理vector元素
    {
        char *p = new char[(*iter).size()+1];       //创建字符数组
        strcpy(p, (*iter).c_str());    //复制vector元素的数据到字符数组
        parr[ix] = p;                   //将指向字符数组的指针插入到字符指针数组
    }
    for(ix = 0; ix != svec.size(); ++ix)
    //{
     //   cout << parr[ix] << "\t";           //一样也是输出的是字符串,并不是指针地址。
        delete [] parr[ix];             //释放各个字符数组
    //}
    delete [] parr;                 //释放字符指针数组
    return 0;
}
*/
/*
测试实例

hello world
hello sang
just let them alone
and don't care about them


*/


如果您对本文满意,请回复,谢谢^ . ^ . ^ . ^

同时欢迎提出不同意见,以帮助我改进,不胜感激!!!

——桑海整理


原创粉丝点击