C++ prime第五版第5章---课后习题

5.14 编写一段程序,从标准输入中读取若干string对象并查找连续重复出现的单词,所谓连续重复出现的意思是:一个单词后面紧跟着这个单词本身。要求记录连续重复出现的最大次数以及对应的单词。如果这样的单词存在,输出重复出现的最大次数;如果不存在,输出一条信息说明任何单词都没有连续出现过。 例如:如果输入是:how now now now brown cow cow 那么输出应该表明单词now连续出现了3次。

#include<iostream>
using namespace std;
#include<string>
int main() {
	string name;
	int max = 0;
	int time = 0;
	string final_name;
	string last_name;
	while (cin >> name && name != "###") {
		if (name != last_name) {
			if (time > max) {
				max = time;		//更新出现的最大次数
				final_name = last_name;		//记录最大次数对应的值
			}
			last_name = name;	//重新记录次数
			time = 0;
		}
		else {
			time++;
		}
	}
	if (max > 0)
		cout << "单词" << final_name << "出现了" << max+1 << "次" << endl;
	else
		cout << "单词没有出现重复的" << endl;
	return 0;
}

5.17 假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。为了实现这一目标,对于两个不等长的vector对象,只需挑出长度较短的那个,把它的所有元素和另一个vector对象比较即可。例如,如果两个vector对象的元素分别是0、1、1、2 和 0、1、1、2、3、5、8,则程序的返回结果为真。

#include<iostream>
using namespace std;
#include<vector>
int main() {
	vector<int> vec1{0,1,1,2};
	vector<int> vec2{0,1,1,2,3,5,8};
	vector<int>::iterator iter1 = vec1.begin();
	vector<int>::iterator iter2 = vec2.begin();
	bool flag = true;
	for (; iter1 != vec1.end() && iter2 != vec2.end(); ++iter1,++iter2) {
		if (*iter1 != *iter2) {
			flag = false;
			break;
		}
		
	}
	cout << flag << endl;
	return 0;
}

5.20 编写一段程序,从标准输入中读取string对象的序列直到连续出现两个相同的单词或者所有的单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次时使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有任何单词是连续重复出现的。

#include<iostream>
using namespace std;
#include<vector>
int main() {
	vector<string> vStr;
	string curStr;
	string lastStr;
	while (cin >> curStr) {
		vStr.push_back(curStr);
	}
	auto beg = vStr.begin();
	while (beg != vStr.end()) {
		if (*beg != lastStr)
			lastStr = *beg;
		else	
			break;
		beg++;
	}
	if(beg!=vStr.end())
		cout << "重复的单词是:" << lastStr << endl;
	else
		cout << "没有重复的单词" << endl;
	return 0;
}

5.25 修改上一题的程序,使用try语句块去捕获异常。catch子句应该为用户输出一条提示信息,询问其是否输入新数并重新执行try语句块的内容。

#include<iostream>
using namespace std;
#include<vector>

int main() {
	int num1 = 0, num2 = 0;
	cin >> num1 >> num2;	
	try {
		if (num2 == 0) {
			throw runtime_error("num==0");
		}
	}
	catch (runtime_error) {
		cout << "num2不能为0,是否需要重新输入? Y:是  N:否 " << endl;
		char ch;
		cin >> ch;
		if (ch == 'Y')
		{
			cin >> num2;
		}
		else {
			return 0;
		}
	}
	cout << (num1 / num2) << endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值