IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++ Primer 第三章:字符串、向量和数组 练习答案记录 -> 正文阅读

[C++知识库]c++ Primer 第三章:字符串、向量和数组 练习答案记录

c++ Primer 第三章:字符串、向量和数组 练习答案记录

练习题导航

下面练习程序别忘记开头都加上这一语句

#include<iostream>

练习3.1(1) 使用恰当的using声明重做1.4.1节(第11页)的练习

using std::cin;
using std::cout;
using std::endl;
int main()
{
	int i = 0;
	int sum = 0, j = 50;
	cout << "请输入所要进入的练习:" << endl;
	cin >> i;
	switch (i) {
	case 1:
		cout << "练习1.9 编写程序,使用while循环将50到100的整数相加\n" << endl;
		while (j<= 100) {
			sum += j;
			j++;
		}
		cout << "50到100的整数相加结果:" << sum << endl;
		break;
	case 2:
		cout << "练习1.10 编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数\n" << endl;
		for (int a = 10; a >= 0; a--) {
			cout << a << " " << endl;
		}
		break;
	case 3:
		cout << "练习1.11 提示用户输入两个整数,打印出这两整数所指定的范围内的所有整数\n" << endl;
		cout << "输入两个整数,打印出这两整数所指定的范围内的所有整数:" << endl;
		cin >> i >> j;
		if (i < j) {
			for (i; i <= j; i++) {
				cout << i << endl;
			}
		}
		else {
			if (i == j) {
				cout << "所输入两整数相等,无范围" << endl;
			}
			else {
				for (i; i >= j; i--) {
					cout << i << endl;
				}
			}
		}
		break;
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

练习3.1(1) 使用恰当的using声明重做2.6.2节(第67页)的练习

练习2.41 使用你自己的Sales_data类重写1.5.1节(第20页)、1.5.2节(21页)和1.6节(22页)的练习

using std::cin;
using std::cout;
using std::endl;
using std::string;
struct Sales_data {
	string book_name;    //图书编号
	unsigned book_sales = 0;  //图书售出数量
	double unit_price = 0;    //图书销售单价
	double book_revenue = 0;  //计算销售收入
};
int main()
{
	Sales_data data, data1, data2;
	int i = 0, sum = 1;
	cout << "请输入所需要进入的练习程序中:" << std::endl;
	cin >> i;
	switch (i) {
	case 1:
		cout << "练习1.23 编写程序,读取多条销售记录,并统计每个ISBN(每本书)有几条销售记录" << endl;
		if (cin >> data1.book_name) {
			if (data1.book_name == "over")
				break;
			cin >> data1.book_sales >> data1.unit_price;
		}
		while (cin >> data2.book_name) {
			if (data2.book_name == "over")          //当输入over的时候,跳出循环
				break;
			cin >> data2.book_sales >> data2.unit_price;
			if (data1.book_name == data2.book_name) {                          //如果两书名字相同
				sum++;
			}
			else {
				cout << data1.book_name << "卖出了:" << sum << "本" << endl;
				data1.book_name = data2.book_name;
				data1.book_sales = data2.book_sales;
				data1.unit_price = data2.unit_price;
				sum = 1;
			}
		}
		break;
	case 2:
		cout << "练习1.24 输入表示多个ISBN的多条销售记录来测试上一个程序,每个ISBN的记录应该聚在一起" << endl;
		break;
	}
}

在这里插入图片描述

练习3.2 编写一段程序从标准输入中一次读入一整行,然后修改该程序使其一次读入一个词

#include<string>
using namespace std;
int main()
{
	string input;
	unsigned int i = 0;
	cout << "从标准输入中一次读入一整行按1,一次读入一个词按2" << endl;
	cin >> i;
	switch (i) {
	case 1:
		cout << "从标准输入中一次读入一整行:" << endl;
		cin.ignore();   //忽略一个回车符号,不然下面语句自动判断回车不运行了
		getline(cin, input);    
		cout << input << endl;
		break;
	case 2:
		cout << "一次读入一个词" << endl;
		while (cin >> input) {
			if (input == "over")
				break;
			cout << input << endl;
		}
		break;
	}
}

在这里插入图片描述
在这里插入图片描述

练习3.4 编写一段程序读入两个字符串,比较其是否相等并输出结果。结果不相等,输出较大的那个字符串。改写上述程序,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串

#include<string>
using namespace std;
int main()
{
	string input1,input2;
	unsigned i = 0;
	cout << "两个字符串,结果不相等,输出较大的那个字符串按1,比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串按2" << endl;
	cin >> i;
	switch (i) {
	case 1:
		cout << "比较两个字符串,结果不相等,输出较大的那个字符串" << endl;
		cin.ignore();    //忽略一个回车符号,不然下面语句自动判断回车不运行了
		getline(cin, input1);
		getline(cin, input2);
		if (input1 == input2) {
			cout << "两字符串相同" << endl;
		}
		else {
			if (input1 > input2) {
				cout <<"第一个字符串比较大:" << input1 << endl;
			}
			else {
				cout <<"第二个字符串比较大:" << input2 << endl;
			}
		}
		break;
	case 2:
		cout << "比较输入的两个字符串是否等长,如果不等长,输出长度较大的那个字符串" << endl;
		cin.ignore();     //忽略一个回车符号,不然下面语句自动判断回车不运行了
		getline(cin, input1);
		getline(cin, input2);
		if (input1.size() == input2.size()) {
			cout << "两字符串等长" << endl;
		}
		else {
			if (input1.size() > input2.size()) {
				cout << "第一个字符串长:" <<input1<< endl;
			}
			else {
				cout << "第二个字符串长:"<<input2 << endl;
			}
		}
		break;
	}
}

在这里插入图片描述
在这里插入图片描述

练习3.5 编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出链接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来

#include<string>
using namespace std;
int main()
{
	string input,output;
	cout << "请输入字符串,如若结束输入则输入over" << endl;
	while (getline(cin,input)) {
		if (input == "over")
			break;
		cout << "请继续输入字符串,如若结束输入则输入over" << endl;
		output = output + input;
	}
	cout << "入多个字符串并将它们连接在一起,输出链接成的大字符串:" << output << endl;
}

在这里插入图片描述

练习3.6 编写一段程序,使用范围for语句将字符串内的所有字符用X代替 法一

#include<string>
using namespace std;
int main()
{
	string str = "Hello World!";
	const char* a = "X";     //这个是n所返回的类型,所以要这样定义
	for (auto& n : str) {
		n = *a;
	}
	cout << str << endl;
}

在这里插入图片描述

练习3.6 编写一段程序,使用范围for语句将字符串内的所有字符用X代替 法二

#include<string>
using namespace std;
int main()
{
	string str = "Hello World!";
	const char* a = "X";     //这个是n所返回的类型,所以要这样定义
	for (int i = 0; i <= str.size();i++) {
		str[i] = *a;
	}
	cout << str << endl;
}

在这里插入图片描述

练习3.6 编写一段程序,使用范围for语句将字符串内的所有字符用X代替 法三

#include<string>
using namespace std;
int main()
{
	string str = "Hello World!";
	const char* a = "x";     //这个是n所返回的类型,所以要这样定义
	for (int i = 0; i <= str.size();i++) {
		str[i] = toupper(*a);
	}
	cout << str << endl;
}

在这里插入图片描述

练习3.6 编写一段程序,使用范围for语句将字符串内的所有字符用X代替 法四

#include<string>
using namespace std;
int main()
{
	string str = "Hello World!";
	for (int i = 0; i <= str.size();i++) {
		str[i] = 'X';   //字符字面值
	}
	cout << str << endl;
}

在这里插入图片描述

练习3.7 就上一题如果将循环控制变量的类型设为char将发生什么?先估计一下结果,然后实际编程进行验证

答案是类型不匹配,字符字面值可以匹配,变成char型就会显示无法给const
char*赋char型,所以3.6中我所用的法一到法三都是为了解决这个问题

练习3.8 分别用while循环和传统的for循环重写第一题的程序,你觉得哪种形式更好呢?为什么?

我认为for循环更好,一般情况所声明的变量不会对其他程序产生影响。

#include<string>
using namespace std;
int main()
{
	string str = "Hello World!";
	string::size_type n = 0;
	while (n<=str.size()) {
		str[n] = 'X';
		n++;
	}
	cout << str << endl;
}

在这里插入图片描述

练习3.9 下面的程序有何作用?它合法吗?如果不合法,为什么?

合法

#include<string>
using namespace std;
int main()
{
	string s;
	cout << s[0] << endl;
}

练习3.10 编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分

#include<string>
using namespace std;
int main()
{
	string str,output;
	cout << "读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分" << endl;
	getline(cin, str);
	for (auto& n : str) {
		if (!ispunct(n)) {         //如果不是标点符号则输入
			output += n;
		}
	}
	cout << "将标点符号去除后输出字符串剩余的部分为:" << output << endl;
}

在这里插入图片描述

练习3.11 下面的范围for语句合法吗?如果合法,c的类型是什么?

合法:对const char的引用,但是不能对c进行改变,如果改变就会像下面一样报错

#include<string>
using namespace std;
int main()
{
	const string s = "Keep out!";
	for (auto& c : s) {
		c = 'X';            //错误:“c”: 不能给常量赋值
	}
}

练习3.12 下列vector对象的定义有不正确的吗?如果有,请指出来。对于正确的,描述其结果;对于不正确的,说明其错误的原因

#include<string>
#include<vector>
using namespace std;
int main()
{
	vector<vector<int>>ivec;     //合法:该向量元素是vector对象
	//vector<string>svec = ivec; //错误:无法从“std::vector<std::vector<int,std::allocator<int>>,std::allocator<std::vector<int,std::allocator<int>>>>”转换为“std::vector<std::string,std::allocator<std::string>>”
	vector<string>svec(10, "null"); //合法:创建了包含10元素“null”的svec对象
}

练习3.13 下列的vector对象各包含多少个元素?这些元素的值分别是多少?

#include<string>
#include<vector>
using namespace std;
int main()
{
	vector<int> v1;       //创建了一个默认初始值的对象v1(包含0元素)
	vector<int>v2(10);    //创建了包含10个元素的对象v2
	vector<int>v3(10, 42);//创建了值为42,包含10个元素的对象v3
	vector<int>v4{ 10 };  //创建了包含一个元素,值为10的对象v4
	vector<int>v5{ 10,42 };//创建了包含两个元素,值分别为10,42的对象v5
	vector<string>v6{ 10 };//创建了包含10个元素的对象v6(空字符串)
	vector<string>v7{ 10,"hi" };//创建了包含10个元素,都为“hi”的对象v7
}

练习3.14 编写一段程序,用cin读入一组整数并把它们存入一个vector对象

#include<string>
#include<vector>
using namespace std;
int main()
{
	vector<int> digit;
	int i = 0;
	while (cin >> i) {
		digit.push_back(i);
	}
}

练习3.15 改写上一题程序,不过这次读入的是字符串

#include<string>
#include<vector>
using namespace std;
int main()
{
	vector<string> str;
	string i;
	while (cin >> i) {
		str.push_back(i);
	}
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:13:43  更:2022-10-17 12:17:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 3:30:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码