zoukankan      html  css  js  c++  java
  • C++Primer第五版——习题答案详解(二)


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

    第3章 字符串、向量和数组


    练习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
    两迭代器不能直接相加。迭代器的运算见P111

    练习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;
    }
    
  • 相关阅读:
    英文社区优文转载和翻译:A Look at Gradient Descent and RMSprop Optimizers
    论文速读:《AN ACTOR-CRITIC ALGORITHM FOR SEQUENCE PREDICTION》
    英文社区优文转载和翻译:NLP vs. NLU —— from Understanding a Language to Its Processing
    Dell XPS13 新安装ubuntu16.04LTS 没有显卡没有声卡解决方案
    QWidget设置边框问题
    qss设置QTableView样式时,对于item项,border和selection_background-color不能放在一起,应该分开写
    QTableView绑定QTableModel单元格内数据居中
    QtCreator运行和调试按键是灰的,将鼠标悬在按键上提示:“The .pro file xx.pro could not be parsed.”
    Qt多线程run函数内访问类的成员变量在Linux系统中被优化的问题
    多线程中实现QUdp通信的方法
  • 原文地址:https://www.cnblogs.com/Mered1th/p/10485932.html
Copyright © 2011-2022 走看看