C++Primer第五版——习题答案详解(二)


习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html

第三章课后题


练习3.2
一次读入一整行

#include<iostream>
#include<string>
using namespace std;
int main() {
        string a;
        while (getline(cin, a)) {
               cout << a << endl;
        }
        return 0;
}

一次读入一个词

#include<iostream>
#include<string>
using namespace std;
int main() {
        string a;
        while (cin>>a) {
               cout << a << endl;
        }
        return 0;
}

练习3.4

#include<iostream>
#include<string>
using namespace std;
int main() {
    string a, b;
    cin >> a >> b;
    if (a != b) {
        cout << (a >= b ? a : b);
    }
    return 0;
}

练习3.5

#include<iostream>
#include<string>
using namespace std;
int main() {
    string ans,a;
    while (cin >> a) {
        ans += a;
    }
    cout << ans << endl;
    system("pause");
    return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main() {
    string ans,a;
    while (cin >> a) {
        ans += a;
        ans += " ";
    }
    cout << ans << endl;
    system("pause");
    return 0;
}

练习3.6
利用C++11新特性范围for语句,注意要修改字符串必须加上&引用

#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main() {
    string t;
    cin >> t;
    for (auto &i : t) {
        i = 'X';
    }
    cout << t << endl;
    system("pause");
    return 0;
}

练习3.7
改为char后结果一样,因为修改的时候就是按字符修改的。

练习3.8
for循环

#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main() {
    string t;
    cin >> t;
    for (int i = 0;i < t.size();i++) {
        t[i] = 'X';
    }
    cout << t << endl;
    system("pause");
    return 0;
}

while循环

#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main() {
    string t;
    cin >> t;
    int i = 0;
    while (i < t.size()) {
        t[i] = 'X';
        i++;
    }
    cout << t << endl;
    system("pause");
    return 0;
}

显然已知循环次数,for循环更好用些。

练习3.9
不合法,s是空字符串。

练习3.10

#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main() {
    string t,ans;
    cin >> t;
    for (char &i : t) {
        if (!ispunct(i)) {
            ans += i;
        }
    }
    cout << ans << endl;
    system("pause");
    return 0;
}

练习3.11
如果循环中修改字符串的值,不合法。

练习3.14

#include<iostream>
#include<vector>
using namespace std;
int main() {
    vector<int> ans;
    int temp;
    while (cin >> temp) {
        ans.push_back(temp);
    }
    return 0;
}

练习3.15

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    vector<string> ans;
    string temp;
    while (cin >> temp) {
        ans.push_back(temp);
    }
    return 0;
}

练习3.17

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    vector<string> ans;
    string temp;
    while (cin >> temp) {
        ans.push_back(temp);
    }
    for (string &i : ans) {
        for (char &j : i) {
            if (islower(j)) {
                j = toupper(j);
            }
        }
        cout << i << endl;
    }
    system("pause");
    return 0;
}

练习3.18
不合法,规定只能对确知已存在的元素执行下标操作!

练习3.19

vector<int> val1{ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42};
vector<int> val2(10,42);
vector<int> val3 = val2;

练习3.20

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    vector<int> t;
    int temp;
    while (cin >> temp) {
        t.push_back(temp);
    }
    int len = t.size();
    for (int i = 0;i < len; i++) {
        cout << t[i] + t[i + 1] << endl;
        i++;
    }
    system("pause");
    return 0;
}
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    vector<int> t;
    int temp;
    while (cin >> temp) {
        t.push_back(temp);
    }
    int len = t.size();
    for (int i = 0;i < len; i++) {
        cout << t[i] + t[len - i - 1] << endl;
        i++;
    }
    system("pause");
    return 0;
}

练习3.23

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    vector<int> res = {1,2,3,4,5,6,7,8,9,10};
    for (auto it = res.begin();it != res.end();it++) {
        *it = (*it) * 2;
    }
    for (auto i : res) {
        cout << i << endl;
    }
    system("pause");
    return 0;
}

练习3.24

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    vector<int> t;
    int temp;
    while (cin >> temp) {
        t.push_back(temp);
    }
    for (auto it = t.begin();it != t.end(); it++) {
        cout << (*it) + *(it+1) << endl;
        it++;
    }
    system("pause");
    return 0;
}

练习3.25

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    vector<unsigned> scores(11, 0);
    unsigned grade;
    while (cin >> grade) {
        if (grade <= 100) {
            auto it = scores.begin();
            ++*(it + grade / 10);
        }
    }
    for (auto i : scores) {
        cout << i << endl;
    }
    system("pause");
    return 0;
}

练习3.26
因为end指向的是最后一个元素的后一个位置。

练习3.27
a.非法,数组大小应该为常量
b.合法
c.非法,返回值不是常量
d.非法,数组大小开小了

练习3.28
分别为空、0、空、随机值

练习3.29
数组大小不够灵活,不能往其中增加元素

练习3.30
去掉for循环中的等于号

练习3.31

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

练习3.32

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

练习3.33
不初始化会出现随机数字。

练习3.35

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
    int *p = a;
    for (int i = 0;i < 10;i++) {
        *(a + i) = 0;
    }
    for (int i = 0;i < 10;i++) {
        cout << a[i];
    }
    system("pause");
    return 0;
}

练习3.36

bool isEqual(int a[], int m,int b[],int n) {
    if (m != n) return false;
    for (int i = 0;i < m;i++) {
        if (a[i] != b[i]) {
            return false;
        }
    }
    return true;
}
bool isEqual(vector<int> a, vector<int> b) {
    if (a == b) return true;
    else return false;
}

练习3.37
输出hello但后面跟了奇奇怪怪的东西。。暂时不太明白

练习3.38
地址相加没有意义

练习3.39

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    string s1 = "A string example";
    string s2 = "A different string";
    if (s1 < s2) cout << "s1<s2";
    else if (s1 == s2)cout << "s1=s2";
    else cout << "s1>s2";
    system("pause");
    return 0;
}
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main() {
    const char s1[] = "A string example";
    const char s2[] = "A different string";
    if (strcmp(s1, s2) < 0) cout << "s2>s1";
    else if (strcmp(s1, s2) == 0) cout << "s1=s2";
    else cout << "s1>s2";
    system("pause");
    return 0;
}

练习3.40

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int main() {
    char a[100] = "A example";
    char b[100] = "A string";
    char c[200];
    strcpy_s(c, a);
    char *pc = c;
    while (*pc) {
        cout << *pc;
        pc++;
    }
    cout << endl;

    strcat_s(c, " ");
    pc = c;
    while (*pc) {
        cout << *pc;
        pc++;
    }
    cout << endl;

    strcat_s(c, b);
    pc = c;
    while (*pc) {
        cout << *pc;
        pc++;
    }
    cout << endl;
    system("pause");
    return 0;
}

练习3.41

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int main() {
    int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
    vector<int> t(begin(a), end(a));
    for (auto i : t) {
        cout << i;
    }
    system("pause");
    return 0;
}

练习3.42

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int main() {
    vector<int> t(10,1);
    int b[10];
    for (int i = 0;i < 10;i++) {
        b[i] = t[i];
    }
    system("pause");
    return 0;
}

练习3.43

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int main() {
    int ia[3][4] = {
        {0,1,2,3},
    {4,5,6,7},
    {8,9,10,11}
    };

    for (const int(&i)[4] : ia) {
        for (int j : i) {
            cout << j << " ";
        }
    }
    cout << endl;

    for (size_t i = 0;i < 3;i++) {
        for (size_t j = 0;j < 4;j++) {
            cout << ia[i][j] << " ";
        }
    }
    cout << endl;   

    for (int(*i)[4] = begin(ia);i != end(ia);i++) {
        for (int *j = begin(*i);j != end(*i);j++) {
            cout << *j << " ";
        }
    }
    cout << endl;
    system("pause");
    return 0;
}

练习3.44

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int main() {
    typedef int int_array[4];
    int ia[3][4] = {
        {0,1,2,3},
    {4,5,6,7},
    {8,9,10,11}
    };

    for (const int_array &i : ia) {
        for (int j : i) {
            cout << j << " ";
        }
    }
    cout << endl;

    for (size_t i = 0;i < 3;i++) {
        for (size_t j = 0;j < 4;j++) {
            cout << ia[i][j] << " ";
        }
    }
    cout << endl;   

    for (int_array *i = begin(ia);i != end(ia);i++) {
        for (int *j = begin(*i);j != end(*i);j++) {
            cout << *j << " ";
        }
    }
    cout << endl;
    system("pause");
    return 0;
}

练习3.45

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int main() {
    typedef int int_array[4];
    int ia[3][4] = {
        {0,1,2,3},
    {4,5,6,7},
    {8,9,10,11}
    };

    for (auto &row : ia) {
        for (auto &col : row) {
            cout << col << " ";
        }
    }
    cout << endl;

    for (size_t i = 0;i < 3;i++) {
        for (size_t j = 0;j < 4;j++) {
            cout << ia[i][j] << " ";
        }
    }
    cout << endl;   

    for (auto *i = begin(ia);i != end(ia);i++) {
        for (auto *j = begin(*i);j != end(*i);j++) {
            cout << *j << " ";
        }
    }
    cout << endl;
    system("pause");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Mered1th/p/10485932.html
今日推荐