c++ primer 第五章练习

练习5.14

输入若干string对象,查找连续出现的单词和数目。

  1. 第一种方法
#include<iostream>
#include<vector>
#include<string>

int main()
{
	using namespace std;
	int count=1;
	vector<string> v;
	string str;
	while (cin >> str)
	{
		v.push_back(str);
	}
	auto it = v.begin();
	while(it!=v.end())
	{
		++it;
		if (*(it-1) == *it) ++count;
		else
		{
			cout << *(it -1)<< ":" << count << endl;
			count = 1;
		}
		
	}
	return 0;

}

  1. 第二种方法
#include<iostream>
#include<vector>
#include<string>

int main()
{
	using namespace std;
	string word, wordnext;

	if (cin >> word)
	{
		int wordCnt = 1;
		while (cin >> wordnext)
		{

			if (word == wordnext)
				++wordCnt;
			else
			{
				cout << word << " occurs" << wordCnt << " times" << endl;
				word = wordnext;
				wordCnt = 1;
			}
		}
		cout << word << " occurs" << wordCnt << " times" << endl;
	}

	return 0;
	
}

以上代码需要注意迭代器的范围。

练习5.17

#include<iostream>
#include<vector>

int main()
{
	using namespace std;
	vector<int> v1 = { 0,1,1,3 }, v2 = { 0,1,1,2,3,5,8 };
	auto it = v1.begin(), it2 = v2.begin();
	for (; it != v1.end(); ++it, ++it2)
		if (*it != *it2) 
		{
			cout << "NO!" << endl;
			return 0; 
		}
	cout << "ture!!" << endl;
	return 0;

}

练习5.20

#include<iostream>
#include<string>

int main()
{
	using namespace std;
	string str,temp;
	cin >> str;
	temp = str;
	int count=0;
	while (cin >> str)
	{
		if (temp == str)
		{
			++count;
			cout << str << "连续重复" << endl;
			break;
		}
		else temp = str;
	}
	if (count == 0) cout << "没有任何单词连续重复!" << endl;
	return 0;
}

练习5.25(异常处理)

#include<iostream>
#include<stdexcept>
int main()
{
	using namespace std;
	int i, j;
	while (cin >> i >> j)
	{
		try
		{
			if (j == 0)
				throw runtime_error("j should not 0");//抛出异常,转到catch;
			double k = i / j;
			cout << k << endl;
		}
		catch(runtime_error err)//处理异常
		{
			cout << err.what() << "please try again?y or n!" << endl;
			char ch;
			cin >> ch;
			if (isspace(ch) || ch == 'n') break;
		}
		
	}
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值