• C++primer习题--第4章


    本文地址:http://www.cnblogs.com/archimedes/p/cpp-primer-chapter4-ans.html,转载请注明源地址。

    【习题 4.7】

    编写必要的代码将一个数组赋给另一个数组,然后把这段代码改用 vector 实现。 考虑如何将一个 vector 赋给另一个 vector。

    用数组实现:

    #include <iostream>
    using namespace std;
    int main( )
    {
        const size_t size=5;
        int a1[size]={0,1,2,3,4};
        int a2[size];
        for(size_t i=0; i<size; ++i)
            a2[i]=a1[i];
        system("PAUSE");
        return 0;
    }

    用vector实现:

    #include <iostream>
    #include <vector>
    using namespace std;
    int main( )
    {
        int a[5]={1,2,3,4,5};
        vector<int> vec1(a,a+5);
        vector<int> vec2;
        for(vector<int>::iterator it=vec1.begin(); it!=vec1.end(); ++it)
            vec2.push_back(*it);
        system("PAUSE");
        return 0;
    }

    【习题 4.8】

    编写程序判断两个数组是否相等,然后编写一段类似的程序比较两个 vector。

    bool judge1(int *a, int *b, int n)
    {
        for(size_t i=0; i<n; i++) {
            if(a[i]!=b[i])
                return false;
        }
        return true;
    }

    比较vector:

    bool judge2(vector<int> a, vector<int> b)
    {
        for(vector<int>::size_type it=0; it<a.size(); it++) {
            if(a[it]!=b[it])
                return false;
        }
        return true;
    }

    【习题 4.9】

    编写程序定义一个有 10 个 int 型元素的数组,并以其在数组中的位置作为各元素的初值。

    #include <iostream>
    using namespace std;
    int main( )
    {
        int a[10];
        for(size_t i=0; i<10; i++) {
            a[i]=i;
            cout<<a[i]<<" ";
        }
        cout<<endl;
        system("PAUSE");
        return 0;
    }

    【习题 4.14】

    编写代码修改指针的值;然后再编写代码修改指针所指对象的值。

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    int main( )
    {
        int *p;
        int a=1;
        int b=2;
        p=&a;
        cout<<p<<endl;
        p=&b;
        cout<<p<<endl;
        *p=12;
        cout<<"a="<<a<<endl;
        cout<<"b="<<b<<endl;
        system("PAUSE");
        return 0;
    }

    【习题 4.18】

    编写程序,使用指针把一个 int 型数组的所有元素设置为 0。

    #include <iostream>
    using namespace std;
    int main( )
    {
        int a[5]={1,2,3,4,5};
        for(int*p=a; p<a+5; p++)
            *p=0;
        for(int *p=a; p<a+5; p++)
            cout<<*p<<endl;
        system("PAUSE");
        return 0;
    }

    【习题 4.25】

    编写程序比较两个 string 类型的字符串,然后编写另一个程序比较两个 C 风格字符串的值。

    #include <iostream>
    #include <string>
    using namespace std; int main( ) { string s1,s2; cout<<"输入两个字符串: "; cin>>s1>>s2; if(s1>s2) cout<<"""<<s1<<"""<<"is bigger than"<<"""<<s2<<"""<<endl; else if(s1>s2) cout<<"""<<s2<<"""<<"is bigger than"<<"""<<s1<<"""<<endl; else cout<<"thay are equal"<<endl; system("PAUSE"); return 0; }

    比较两个 C 风格字符串:

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    int main( )
    {
        const int size=80;
        char *s1,*s2;
        s1=new char[size];
        s2=new char[size];
        if(s1==NULL || s2==NULL) {
            cout<<"No enough memory!"<<endl;
            return -1;
        }
        cout<<"Enter two strings:"<<endl;
        cin>>s1>>s2;
        int result;
        result=strcmp(s1,s2);
        if(result>0)
            cout<<"""<<s1<<"""<<"is bigger than"<<"""<<s2<<"""<<endl;
        else if(result<0)
            cout<<"""<<s2<<"""<<"is bigger than"<<"""<<s1<<"""<<endl;
        else
            cout<<"thay are equal"<<endl;
        delete []s1;
        delete []s2;
        system("PAUSE");
        return 0;
    }

    【习题 4.28】

    编写程序由从标准输入设备读入的元素数据建立一个 int 型 vector 对象,然后动态创建一个与该 vector 对象大小一致的数组,把 vector 对象的所有元素复制给新数组。

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    
    int main( )
    {
        vector<int> vec;
        int n;
        cout<<"请输入数字:"<<endl;
        while(cin>>n)
            vec.push_back(n);
        int size=vec.size();
        int *a=new int[size];
        for(vector<int>::size_type i=0; i<size; i++) {
            a[i]=vec[i];
        }
        cout<<"符合要求的数组为:";
        for(int i=0; i<size; i++)
            cout<<a[i]<<endl;
        delete []a;
        system("PAUSE");
        return 0;
    }

    【习题 4.30】

    编写程序连接两个 C 风格字符串字面值,把结果存储在一个 C 风格字符串中。然后再编写程序连接两个 string 类型字符串,这两个 string 类型字符串与前面 的 C 风格字符串字面值具有相同的内容。

    #include <iostream>
    #include <cstring>
    using namespace std;
    int main( )
    {
        const char *s1="hello ";
        const char *s2="world.";
        size_t len=strlen(s1)+strlen(s2);
        char *res=new char[len+1];
        strcpy(res,s1);
        strcat(res,s2);
        cout<<res<<endl;
        delete []res;
        system("PAUSE");
        return 0;
    }

    改进后的代码:

    #include <iostream>
    #include <string>
    using namespace std;
    int main( )
    {
        const string s1("hello ");
        const string s2("world.");
        string res;
        res=s1;
        res+=s2;
        cout<<res<<endl;
        system("PAUSE");
        return 0;
    }

    【习题 4.31】

    编写程序从标准输入设备读入字符串,并把该串存放在字符数组中。描述你的程序如何处理可变长的输入。提供比你分配的数组长度长的字符串数据测试你的程序。

    #include<iostream>
    #include<string>
    #include<cstring>
    using namespace std;
    int main( )
    {
        string instr;
        const size_t size=10;
        char restr[size];
        cout<<"请输入字符串(<="<<size<<"个字符):"<<endl;
        cin>>instr;
        size_t len=strlen(instr.c_str());
        if(len>size) len=size;
        strncpy(restr,instr.c_str(),len);
        restr[len+1]='';
        return 0;
    }
    
    
     

    【习题 4.32】

    编写程序用 int 型数组初始化 vector 对象。

    #include<iostream>
    #include<vector>
    using namespace std;
    int main( )
    {
        const size_t arr_size=9;
        int int_arr[arr_size];
        cout<<"请输入:"<<arr_size<<"个元素:"<<endl;
        for(size_t i=0; i!=arr_size; i++)
            cin>>int_arr[i];
        vector<int> ivec(int_arr, int_arr+arr_size);
        system("PAUSE");
        return 0;
    }

    【习题 4.33】

    编写程序把 int 型 vector 复制给 int 型数组。

    #include<iostream>
    #include<vector>
    using namespace std;
    int main( )
    {
        vector<int> ivec;
        int n;
        cout<<"请输入数字:"<<endl;
        while(cin>>n)
            ivec.push_back(n);
        int *a=new int[ivec.size()];
        size_t i=0;
        for(vector<int>::iterator it=ivec.begin(); it!=ivec.end(); ++it,++i)
            a[i]=*it;
        delete []a;
        system("PAUSE");
        return 0;
    }

     【习题 4.34】

    编写程序读入一组 string 类型的数据,并将它们存储在 vector 中。接着,把该 vector 对象复制给一个字符指针数组。为 vector 中的每个元素创建一个新的字符数组,并把该 vector 元素的数据复制到相应的字符数组中,最后把指向 该数组的指针插入字符指针数组。

    #include<iostream>
    #include<vector>
    #include<string>
    #include<cstring>
    using namespace std;
    int main( )
    {
        vector<string> svec;
        string str;
        cout<<"请输入字符串:"<<endl;
        while(cin>>str)
            svec.push_back(str);
        char **arr = new char*[svec.size()];
        size_t i=0;
        for(vector<string>::iterator it=svec.begin(); it!=svec.end(); it++) {
            char *p=new char[(*it).size()+1];
            strcpy(p, (*it).c_str());
            arr[i]=p;
        }
        for(i=0; i!=svec.size(); i++)
            delete []arr;
        system("PAUSE");
        return 0;
    }
  • 相关阅读:
    c基础
    一维数组,字符数组
    循环结构
    分支结构
    结构体
    Python简介和入门
    Python基础(一)
    Markdown 基础学习
    PyCharm 专业版安装
    Python基础(二)
  • 原文地址:https://www.cnblogs.com/wuyudong/p/cpp-primer-chapter4-ans.html
Copyright © 2020-2023  润新知