程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++primer習題--第4章,primer習題--第4章

C++primer習題--第4章,primer習題--第4章

編輯:C++入門知識

C++primer習題--第4章,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<<"輸入兩個字符串:\n"; 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]='\0';
    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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved