C++Primer第五版习题答案(三)

2023-11-04


C++Primer第五版课后习题答案目录

3.2

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s;
	//3.2a
	while (getline(cin, s))
		cout << s << endl;

	//3.2b
	/*while (cin >> s)
		cout << s << endl;*/

	return 0;
}

3.4

#include <iostream>

using namespace std;

int main()
{
	//3.4a
	/*string s1, s2;
	cout << "Please enter two strings:" << endl;
	while(cin >> s1 >> s2)
	{
		if (s1 == s2)
			cout << "s1 == s2" << endl;
		else if (s1 > s2)
			cout << "The bigger string is:" << s1 << endl;
		else
			cout << "The bigger string is:" << s2 << endl;

		cout << endl;
		cout << "Please enter two strings:" << endl;
	}*/
		
	//3.4b
	string s1, s2;
	cout << "Please enter two strings:" << endl;
	while(cin >> s1 >> s2)
	{
		if (s1.size() == s2.size())
			cout << "s1.size() == s2.size()" << endl;
		else if (s1.size() > s2.size())
			cout << "The longer string is:" << s1 << endl;
		else
			cout << "The longer string is:" << s2 << endl;

		cout << endl;
		cout << "Please enter two strings:" << endl;
	}


	return 0;
}

3.5

#include <iostream>
#include <string>

using namespace std;

int main()
{
	//3.5a
	/*string buffer, concatenated;
	while (cin >> buffer)
		concatenated += buffer;
	cout << "The concatenated string is:" << concatenated << endl;*/

	//3.5b
	string buffer, concatenated;
	while (getline(cin, buffer))
		concatenated += buffer;
	cout << "The concatenated string is:" << concatenated << endl;

	return 0;
}

3.6

#include <iostream>

using namespace std;

int main()
{
	string s(5, 'c');
	for (char& c : s)
		c = 'X';
	cout << s << endl;

	return 0;
}

3.20

#include <vector>

using namespace std;

int main()
{
	vector<int> ivec;
	for (int val; cin >> val; ivec.push_back(val));
	if (ivec.empty())
	{
		cout << "input at least one integer." << endl;
		return -1;
	}
	if (ivec.size() == 1)
	{
		cout << "only one integer:" << ivec[0] << endl;
		return -1;
	}
	//3.20a
	/*for (int i = 0; i < ivec.size() - 1; ++i)
	{
		cout << ivec[i] + ivec[i + 1] << " ";
	}
	cout << endl;*/

	//3.20b
	for (int i = 0, j = ivec.size() - 1; i <= j; ++i, --j)
	{
		cout << ivec[i] + ivec[j] << " ";
	}
	cout << endl;

	return 0;
}

3.22

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
	vector<string> v;
	string words;
	/*while (getline(cin, words))
	{
		v.push_back(words);
	}
	for (auto it = v.begin(); it != v.end(); ++it)
	{
		for (auto& c : *it)
		{
			c = toupper(c);
		}
		cout << *it << endl;
	}*/
	while (getline(cin, words))
		v.push_back(words);

	for (auto& s : v)
	{
		for (auto& c : s)
			if (isalpha(c))
				c = toupper(c);
		cout << s << endl;
	}
		
	return 0;
}

3.23

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> v;
	for (int i = 0; i != 10; ++i)
	{
		v.push_back(i);
	}
	for (auto it = v.begin(); it != v.end(); ++it)
	{
		(*it) *= 2;
	}
	for (auto value : v)
	{
		cout << value << endl;
	}

	return 0;
}

3.24

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> ivec;
	for (int val; cin >> val; ivec.push_back(val));

	if (ivec.empty())
	{
		cout << "input at least one integer" << endl;
		return -1;
	}
		
	if (ivec.size() == 1)
	{
		cout << "only one integer:" << ivec[0] << endl;
		return -1;
	}
	//3.24a
	/*for (auto it = ivec.begin(); it != (ivec.end() - 1); ++it)
	{
		cout << (*it) + *(it + 1) << " ";
	}
	cout << endl;*/

	//3.24b
	for (auto left = ivec.begin(), right = ivec.end() - 1; left <= right; ++left, --right)
	{
		cout << (*left) + (*right) << " ";
	}
	cout << endl;  

	return 0;
}

3.31

#include <iostream>

using namespace std;

int main()
{
	int arr[10];
	for (int i = 0; i < 10; i++)
	{
		arr[i] = i;
	}

	for (int i = 0; i < 10; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;

	return 0;
}

3.32

#include <iostream>
#include <vector>	

using namespace std;

int main()
{
	int arr[10];
	for (int i = 0; i < 10; i++)
	{
		arr[i] = i;
	}
	int arr2[10];
	for (int i = 0; i < 10; i++)
	{
		arr2[i] = arr[i];
	}
	for (int i = 0; i < 10; i++)
	{
		cout << arr2[i] << " ";
	}
	cout << endl;

	vector<int> v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	vector<int> v2 = v;

	for (int i = 0; i < 10; i++)
	{
		cout << v2[i] << " ";
	}

	return 0;
}

3.35

#include <iostream>

using namespace std;

int main()
{
	int arr[2] = { 1, 2 };
	int* p = arr;
	p[0] = 0;
	p[1] = 0;
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		cout << arr[i] << " ";
	}

	return 0;
}

3.36

#include <iostream>
#include <vector>

using namespace std;

bool compare(int* begin1, int* end1, int* begin2, int* end2)
{
	if ((end1 - begin1) != (end2 - begin2)) //两数组长度不等
		return false;
	else
	{
		for (int i = 0; i < (end1 - begin1); i++)
		{
			if (begin1[i] != begin2[i])
			{
				return false;
			}
		}
		return true;
	}
}

int main()
{
	int arr[5] = { 0, 1, 2, 3, 4 };
	int arr2[5] = { 0, 1, 2, 3, 4 };
	if (compare(begin(arr), end(arr), begin(arr2), end(arr2)))
		cout << "arr == arr2" << endl;
	else
		cout << "arr != arr2" << endl;

	vector<int> v1 = { 0, 1, 2 };
	vector<int> v2 = { 1, 2 };
	if (v1 == v2)
		cout << "v1 == v2" << endl;
	else
		cout << "v1 != v2" << endl;

	return 0;
}

3.39

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s1 = "string";
	string s2 = "string";

	if (s1 == s2)
		cout << "s1 == s2" << endl;
	else
		cout << "s1 != s2" << endl;

	char cString1[] = "cstring";
	const char* cString2 = "cstring";
	if (strcmp(cString1, cString2) == 0)
		cout << "cstring1 == cstring2" << endl;
	else
		cout << "cstring1 != cstring2" << endl;

	return 0;
}

3.40

#include <iostream>
#include <cstring>

using namespace std;

const char cstr1[] = "string1";
const char cstr2[] = "string2";

int main()
{
	const int newSize = sizeof(cstr1) + sizeof(cstr2) - 1;

	char cstr3[newSize] = { 0 };
	strcat(cstr3, cstr1);
	strcat(cstr3, cstr2);

	cout << cstr3 << endl;

	return 0;
}

3.41

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	int arr[] = { 0, 1, 2, 3, 4, 5 };
	vector<int> ivec(begin(arr), end(arr));
	for (int i = 0; i < ivec.size(); i++)
	{
		cout << ivec[i] << " ";
	}
	cout << endl;

	return 0;
}

3.42

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	vector<int> ivec = { 0, 1, 2, 3, 4, 5 };
	int arr[6];
	for (int i = 0; i < ivec.size(); i++)
	{
		arr[i] = ivec[i];
	}

	for (auto i : arr)
	{
		i += 1;
		cout << i << " ";
	}
	cout << endl;

	return 0;
}

对于P115中int (*p) [4] = ia;为什么不是int (*p) [3] = ia;的思考

因为数组名是指向数组首元素的指针,所以ia是一个含有4个整数的数组的地址,即&ia[0]

#include <iostream>

using namespace std;

int main()
{
	int ia[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
	int arr[4] = { 0, 1, 2, 3 };
	int(*p)[4] = ia;
	int(*p2)[4] = &arr;
	int* p3 = arr;
	int(*p4)[3][4] = &ia;
	
	cout << "p:" << (int)p << endl;
	cout << "p + 1:" << (int)(p + 1) << endl;
	cout << "ia:" << (int)ia << endl;
	cout << "(ia+1):" << (int)(ia + 1) << endl;
	cout << "ia[0]:" << (int)ia[0] << endl;
	cout << "ia[0] + 1:" << (int)(ia[0] + 1) << endl;
	cout << "p4:" << (int)(p4) << endl;
	cout << "p4 + 1:" << (int)(p4 + 1) << endl;

	cout << "p:" << typeid(p).name() << endl;
	cout << "p[0]:" << typeid(p[0]).name() << endl;
	cout << "p[0][0]:" << typeid(p[0][0]).name() << endl;
	cout << "p2:" << typeid(p2).name() << endl;
	cout << "ia:" << typeid(ia).name() << endl;

	cout << p3[1] << endl;

	return 0;
}

3.43

#include <iostream>

using namespace std;

int main()
{
	//3行4列数组
	int ia[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; 
	//1
	//raw为 对含有4个int的数组的引用
	/*for (int (&raw)[4] : ia)  
	{
		for (int column : raw)
		{
			cout << column << " ";
		}
		cout << endl;
	}*/
	//2
	/*for (int raw = 0; raw < sizeof(ia) / sizeof(ia[0]); raw++)
	{
		for (int column = 0; column < sizeof(ia[0]) / sizeof(ia[0][0]); column++)
		{
			cout << ia[raw][column] << " ";
		}
		cout << endl;
	}*/
	//3
	//raw为 含有4个int的数组的指针
	for (int(*raw)[4] = begin(ia); raw != end(ia); raw++) 
	{
		//column为 含有4个int的数组的首地址
		for (int* column = begin(*raw); column != end(*raw); column++) 
		{
			cout << *column << " ";
		}
		cout << endl;
	}

	return 0;
}

3.44

#include <iostream>

using namespace std;
typedef int intArray[4];

int main()
{
	int ia[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
	//1
	//raw为 对含有4个int的数组的引用
	/*for (intArray &raw : ia)
	{
		for (int column : raw)
		{
			cout << column << " ";
		}
		cout << endl;
	}*/
	//2
	/*for (int raw = 0; raw < sizeof(ia) / sizeof(ia[0]); raw++)
	{
		for (int column = 0; column < sizeof(ia[0]) / sizeof(ia[0][0]); column++)
		{
			cout << ia[raw][column] << " ";
		}
		cout << endl;
	}*/
	//3
	//raw为 含有4个int的数组的指针
	for (intArray* raw = ia; raw != end(ia); raw++)
	{
		for (int* column = begin(*raw); column != end(*raw); column++)
		{
			cout << *column << " ";
		}
		cout << endl;
	}

	return 0;
}

3.45

#include <iostream>

using namespace std;

int main()
{
	int ia[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
	//1
	/*for (auto& raw : ia)
	{
		for (auto column : raw)
		{
			cout << column << " ";
		}
		cout << endl;
	}*/
	//2
	/*for (auto i = 0; i < sizeof(ia) / sizeof(ia[0]); i++)
	{
		for (auto j = 0; j < sizeof(ia[0]) / sizeof(ia[0][0]); j++)
		{
			cout << ia[i][j] << " ";
		}
		cout << endl;
	}*/
	//3
	for (auto raw = begin(ia); raw != end(ia); raw++)
	{
		for (auto column = begin(*raw); column != end(*raw); column++)
		{
			cout << *column << " ";
		}
		cout << endl;
	}

	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++Primer第五版习题答案(三) 的相关文章

随机推荐

  • 机器学习方法篇(9)------梯度提升决策树GBDT

    每周一言 生命在于运动 无论脑力还是体力 导语 前面第3 4两节介绍了决策树 由于决策树简单有效 可解释性强 因此被包装成了一些更为高效的机器学习算法 其中最为知名的就是梯度提升决策树GBDT Gradient Boosting Decis
  • 使用RoboForm自动填写表单

    日常工作中 我们也许经常要填写一些内容一模一样的表格 很是讨厌 这里使用RoboForm可以自动填充表格 大大提高我们的工作效率 一 自动填登录页面密码 比如我想登录 右击空白处 选择 RoboForm工具栏 就可以在网页下端显示该工具栏
  • 实训十四:FTP服务器搭建

    实训十四 FTP服务器 2017 年 6 月 6 日编写 今日公布出来 一 搭建FTP服务器 检查网络是否正常 查看 和 连通性 查看主机名称 查看是否已经自动挂载光盘 清楚到光盘挂载的目录 进入挂载安装包中 查看ftp的RPM包 并是安装
  • LeetCode——1798. 你能构造出连续值的最大数目

    一 题目 给你一个长度为 n 的整数数组 coins 它代表你拥有的 n 个硬币 第 i 个硬币的值为 coins i 如果你从这些硬币中选出一部分硬币 它们的和为 x 那么称 你可以 构造 出 x 请返回从 0 开始 包括 0 你最多能
  • ADC 模数转换实验

    生活中的模拟信号 如温度 声音 压力等 需要转换为更方便储存 处理和发射的数字形式 51 单片机无法直接操作这些模拟量 其系统内部时运算都是数字量 0 和 1 因此必须将模拟量转换成数字量 数字量 指的是用一系列 0 和 1 组成的二进制代
  • 单点登录的简单应用

    单点登录 single sign on 解决了分布式下用户登录的信息管理问题 可以自行增强安全策略 并且登录的跨域也不会再成为问题 业务流程 创建两个不同的模块 一个作为客户端 一个作为登陆服务器 都需要引入redis 对于客户端代码如下
  • [java] Map循环遍历的5种方法实现

    java Map循环遍历的5种方法实现 文章目录 一 方法一 推荐 二 方法二 推荐 三 方法三 四 方法四 五 方法五 总结 一 方法一 推荐 推荐使用此方法效率比较高 Map
  • Markdown 技能树(9):表格

    Markdown 技能树 9 表格 在 Markdown 中创建表格的语法要求如下 第一行包含表头 并用 竖线 分隔 第二行将标题与单元格分开 并且必须包含三个或更多破折号 第三行以及随后的任何行均包含单元格值 需要注意的是 不能在 Mar
  • xcode 第三方库 Incompatible block pointer types sending

    Incompatible block pointer types sending void PINMemoryCache strong NSString strong strong id to parameter of type PINCa
  • AtCoder Beginner Contest 212 D - Querying Multiset (优先队列+思维)

    链接 题意 三种操作 向队列中放入一个x 将队列中的数都 x 拿出队列中最小的数 并输出 分析 首先我们知道本题的难点在于维护每次给队列中的数 x因为队列中的数加入的顺序不一样 所以第2种对队列中的贡献有的多有的少 我说的不太清楚 谨慎理解
  • 3步排查,3步优化,探针性能损耗直降44%

    应用接探针除了安全问题 最担心的就是占用系统性能影响业务正常运转 今天分享一个实际案例告诉大家如何来降低探针的性能损耗 下表为某用户的2条核心链路在200并发压测下的性能数据对比 可以看见在接入探针后性能损耗居高不下 3步快速排查 1 对比
  • iOS内购 - 服务端票据验证及漏单引发的思考

    因业务需要实现了APP内购处理 但在过程中出现了部分不可控的因素 导致部分用户反映有充值不成并漏单的情况 仔细考虑了几个付费安全上的问题 凡是涉及到付费的问题都很敏感 任何一方出现损失都是不能接受的 所以在这里整理一些支付安全的要点分享一下
  • 从占领(工商)行业开始:国产中间件杀出血路

    导语 近日 辽宁全省工商管理系统的中间件平台花落金蝶中间件 继在广东省工商系统中获得成功后金蝶中间件在工商行业再次取得重要进展 成熟产品成熟应用 国产中间件渐成大器 在电子政务市场不断突破 国庆长假结束后的第一天 10月8日 辽宁省鞍山市工
  • DY直播运营(持续更新)

    前言 首先感谢 佳灵MM和江北帅哥 的教导 才有了作者的这篇笔记 毕业后做计算机实习工作 发现实际工作待遇和付出与理想不符之后 几经思考也受到了杭州电商的影响决心转行 机缘巧合下 在两位老师的课堂上听了半天课 收益很多 之后打算去全身心学习
  • PCI-E接口的学习

    一 pci e接口的概念 PCI E全称PCI Express peripheral component interconnect express 外部设备互连总线接口 由intel提出并推广 所连接的设备分配独享通道带宽 不共享总线带宽
  • 梯度下降法的三种解释(BGD,SGD,MBGD).

    机器学习里面 梯度下降法可以说是随处可见 虽然它不是什么高大上的机器学习算法 但是它却是用来解决机器学习算法的良药 我们经常会用到梯度下降法来对机器学习算法进行训练 在很多介绍梯度下降的书籍里 我们看到这样的几个英文单词缩写 BGD SGD
  • 互联网JAVA面试常问问题(一)

    一 为什么要创建线程池 线程是稀缺资源 使用线程池可以减少创建和销毁线程的次数 每个工作线程都可以重复使用 可以根据系统的承受能力 调整线程池中工作线程的数量 防止因为消耗过多内存导致服务器崩溃 二 创建线程池参数有哪些及其含义 publi
  • angular4点击事件监听_事件与接口

    首先来讲一下接口 接口的格式是 interface public interface 接口名 接口中有几点注意事项值得特别提醒 1 接口中不能定义变量 2 接口中的方法没有方法体 3 接口中不能实例化对象 4 类的接口可以实现多个 怎么实现
  • 小组活动学习

    0区别问题类型 问题是常规问题还是非常规问题 常规 1 理解问题需求2 理解相关概念3 搜索intenet book ask4 测试 实践 非常规1理解问题 未知 已知 条件2 拟定方案3执行方案4 回顾 警惕 需求不明朗就行动 思绪紊乱
  • C++Primer第五版习题答案(三)

    第三章 字符串 向量和数组 3 2 3 4 3 5 3 6 3 20 3 22 3 23 3 24 3 31 3 32 3 35 3 36 3 39 3 40 3 41 3 42 对于P115中int p 4 ia 为什么不是int p 3