Essential C++第三章练习题

记录essential C++的练习题,解题办法仅供参考,代码不够简洁,但是确实是按照要求完成了题目。

3章练习题

3.1

在这里插入图片描述

#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <iterator>
#include <set>
using namespace std;


int main()
{
	ifstream in_file("D:\\input_file.txt");
	if (!in_file)
		cerr << "open failes false\n";

	istream_iterator<string> is(in_file);
	istream_iterator<string> eof;

	ostream_iterator<string> os(cout,"  ");
	ostream_iterator<int> os2(cout, "  ");

	map<string, int> ma;
	map<string, int>::iterator ite;
	set<string> se;//排除字集
	se.insert("a");
	se.insert("an");
	se.insert("or");
	se.insert("the");
	se.insert("and");
	se.insert("but");
	for (; is != eof; ++is)
	{
		if ((find(se.begin(), se.end(), *is)) == se.end())//无排除字符,加入map
		{
			if ((ite = ma.find(*is)) != ma.end())
			{
				ite->second += 1;
			}
			else
			{
				ma.insert(pair<string, int>(*is,1));
			}
		}
	}
	for (auto i : ma)
	{
		os = i.first;
		os2 = i.second;
		cout << endl;
	}
	system("pause");
	return 0;
}

3.2

在这里插入图片描述

#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <map>
#include <set>
#include <algorithm>
using namespace std;

bool less_than_(string str1, string str2)
{
	return str1.length() > str2.length() ? true : false;
}
int main()
{
	ifstream in_file("D:\\input_file.txt");
	istream_iterator<string> is(in_file);
	istream_iterator<string> eof;

	ostream_iterator<string> oss(cout,"\n");
	ostream_iterator<int> osi(cout);

	vector<string> vec;

	map<string, int> ma;
	map<string, int>::iterator ite;
	set<string> se;

	se.insert("a");
	se.insert("an");
	se.insert("or");
	se.insert("the");
	se.insert("and");
	se.insert("but");
	for (; is != eof; ++is)
	{
		//copy(is, eof, back_inserter(vec));
		//ite = ma.find(*is);
		//if ((find(se.begin(), se.end(), *is)) == se.end())//无
		//{
		//	if (ite == ma.end())//新数据
		//		ma.insert(pair<string, int>(*is, 1));
		//	else
		//		ite->second += 1;
		//}
		copy(is, eof, back_inserter(vec));
	}
	//for (auto i : ma)
	//{
	//	oss = i.first;
	//	osi = i.second;
	//	oss = "\n";

	//}
	//copy(ma.begin(), ma.end(), oss);
	sort(vec.begin(), vec.end(), less_than_);
	copy(vec.begin(), vec.end(), oss);
	system("pause");
	return 0;
}

//注:是由第一题改编而来,被注释掉了的代码只是为了更好理解

3.3

在这里插入图片描述

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

int main()
{
	string str;
	map<string, vector<string>> ma;
	vector<string> a, b, c, d, e, f;
	a.push_back("Pico\n");
	a.push_back("Kell\n");
	a.push_back("Jack\n");

	ma.insert(pair<string,vector<string>>("A", a));
	while (cin >> str)
	{
		if (str == "ok")
			break;
		map<string, vector<string>>::iterator ite = ma.find(str);
		if (ite == ma.end())//无
		{
			str.clear();
			continue;
		}
		else
		{
			for (auto i : ite->second)
				cout << i;
		}
	}
	system("pause");
	return 0;
}

3.4

在这里插入图片描述

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

int main()
{
	istream_iterator<int> is(cin);
	istream_iterator<int> eof;

	ofstream out_file("D:\\input_file.txt");
	ofstream out_file_("D:\\output_file.txt");
	if (!out_file || !out_file_)
	{
		cerr << "open file false\n";
		return 0;
	}
	vector<int> vec;
	vector<int> vec1;//奇数
	vector<int> vec2;//偶数

	copy(is,eof,back_inserter(vec));

	vector<int>::iterator ite = vec.begin();
	for (; ite != vec.end(); ++ite)
	{
		if (*ite % 2 != 0)//奇数
			vec1.push_back(*ite);
		else
			vec2.push_back(*ite);
	}
	ostream_iterator<int> os(out_file, "  ");
	ostream_iterator<int> os_(out_file_, "  ");
	copy(vec1.begin(), vec1.end(), os);
	copy(vec2.begin(), vec2.end(), os_);
	system("pause");
	return 0;
}

具体有一些小细节就懒得改了,像啥输出格式这些,解题思路应该就是这样,不过代码肯定没有标准答案简洁,建议再去看一遍标准答案。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值