c++ primer 学习笔记-第十一章

习题11.3-4:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;

void word_count(const string &file_name, map<string, size_t> &smap, const set<string> &sset)
{
	ifstream in_file(file_name);
	string word;
	while (in_file >> word)
	{
		for (auto &c : word)//调整为小写  
			c = tolower(c);
		auto wc = std::find_if(word.begin(), word.end(), [](char &c){return ispunct(c); });//不适用与中文字符  
		word.erase(wc, word.end());
		if (sset.find(word) == sset.end())
			++smap[word];
	}
	in_file.clear();
	for (const auto &m : smap)
		cout << m.first << " occurs " << m.second << " times." << endl;
}
int main()
{
	map<string, size_t> smap;
	const set<string> sset{ "the", "but", "and", "or", "an", "a" };
	word_count("有标点单词段落测试.txt", smap, sset);
	getchar();
	return 0;
}


习题11.7:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;

using Family = map<string, vector<string>>;
void new_family(Family &familys)
{
	cout << "Input family members,format(lastname child's name child's name...)" << endl;
	string family_name, child_name;
	cin >> family_name;
	cin >> child_name;
	vector<string> children{ child_name };
	familys.insert(pair<string,vector<string>>(family_name, children));
	while (cin >> child_name)
		familys[family_name].push_back(child_name);
	cin.clear();
}
void new_member(Family &familys)
{
	cout << "Please input a new family member, lastname & child's name:" << endl;
	string child_name, family_name;
	cin >> family_name >> child_name;
	familys[family_name].push_back(child_name);
}
void display_familys(Family &familys)
{
	cout << "All familys are displaying:" << endl;
	for (auto &f : familys)
	{
		cout << f.first << " ";
		for (string &s : f.second)
			cout << s << " ";
		cout << endl;
	}
}
int main()
{
	Family familys;
	new_family(familys);
	new_family(familys);
	new_member(familys);
	display_familys(familys);
	system(0);
	getchar();
	getchar();
	getchar();
	getchar();


	return 0;
}

习题11.12-13:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;

void read(vector<pair<string, int> > &vec)//为了兼容老版填了个空格
{
	cout << "读入string 和 int的序列存入pair并保存在vector中:" << endl;
	string s;
	int i;
	while (cin >> s >> i)
		//vec.push_back(std::make_pair(s, i));
		//vec.push_back({ s, i });
		vec.push_back(pair<string, int>(s, i));
}
int main()
{
	vector<pair<string, int> > vec;
	read(vec);
	for (auto p : vec)
		cout << p.first << " " << p.second << endl;
	getchar();
	getchar();
	return 0;
}

习题11.14:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;

using Family = map<string, vector<pair<string, string>>>;
void new_family(Family &familys)
{
	cout << "Input family members,format(lastname child's name & birthday & child's name...)" << endl;
	string family_name, child_name, child_birth;
	cin >> family_name >> child_name >> child_birth;
	vector<pair<string, string>> ssvec{ { child_name, child_birth } };
	familys.insert({ family_name, ssvec });
	while (cin >> child_name >> child_birth)
		familys[family_name].push_back({ child_name, child_birth });
	cin.clear();
}
void new_member(Family &familys)
{
	cout << "Please input a new family member, lastname & child's name:" << endl;
	string family_name, child_name, child_birth;
	cin >> family_name >> child_name >> child_birth;
	familys[family_name].push_back({ child_name, child_birth });
}
void display_familys(Family &familys)
{
	cout << "All familys are displaying:" << endl;
	for (auto &f : familys)
	{
		cout << "姓:" << f.first << endl;
		for (auto &p : f.second)
			cout << "名: " << p.first << " 生日: " << p.second << endl;
	}
}

int main()
{
	Family familys;
	new_family(familys);
	new_member(familys);
	display_familys(familys);
	getchar();
	getchar();
	return 0;
}

习题11.20:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;

void word_count(const string &file_name, map<string, size_t> &smap, const set<string> &sset)
{   //不适用与中文字符  
	ifstream in_file(file_name);
	string word;
	while (in_file >> word)
	{
		for (auto &c : word)//调整为小写  
			c = tolower(c); //下一行检查标点
		word.erase(std::find_if(word.begin(), word.end(), [](char &c){return ispunct(c); }), word.end());
		auto ret = smap.insert({ word, 1 });
		if (!ret.second)
			++ret.first->second;
	}
	in_file.clear();
	for (const auto &m : smap)
		cout << m.first << " occurs " << m.second << " times." << endl;
}
int main()
{
	map<string, size_t> smap;
	const set<string> sset{ "the", "but", "and", "or", "an", "a" };
	word_count("有标点单词段落测试.txt", smap, sset);
	getchar();
	return 0;
}

习题11.23:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;

int main()
{
	std::multimap<string, string> children;
	for (string lastName, childName; cin >> lastName >> childName; children.emplace(lastName, childName));
	for (auto &c : children)
		cout << c.first << " " << c.second << endl;
	getchar();
	getchar();
	return 0;
}

习题11.31:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;

int main()
{
	std::multimap<string, string> authors{ { "Ge", "hhh" }, { "Ge", "aaa" }, { "Hu", "rrr" } };
	auto author = "Ge";
	auto iter = authors.find(author);
	auto cnt = authors.count(author);
	while (cnt)
	{
		iter = authors.erase(iter);//注意此处写法!不然就会重复删除不存在的元素了
		--cnt;
	}
	for (auto &a : authors)
		cout << a.first << " " << a.second << endl;
	getchar();
	getchar();
	return 0;
}

习题11.32:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <utility>
using std::cin; using std::cout; using std::endl;
using std::vector; using std::string;
using std::istream; using std::ifstream;
using std::map; using std::set; using std::pair;

int main()
{
	std::multimap<string, string> authors{ { "alan", "DMA" },
	{ "pezy", "LeetCode" },
	{ "alan", "CLRS" },
	{ "wang", "FTP" },
	{ "pezy", "CP5" },
	{ "wang", "CPP-Concurrency" } };
	std::map<string, std::multiset<string>> order_authors;
	for (auto &a : authors)
		order_authors[a.first].insert(a.second);
	for (auto &a : order_authors)
	{
		cout << a.first << ":" << endl;
		for (auto &work : a.second)
			cout << work << endl;
	}
	getchar();
	getchar();
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值