资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

EssentialC++第三章习题-创新互联

目录

创新互联专注于企业网络营销推广、网站重做改版、右玉网站定制设计、自适应品牌网站建设、H5页面制作商城网站开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为右玉等各大城市提供网站开发制作服务。

3.1

3.2

3.3

3.4


3.1

C++代码:

//3.1
//读写文本文件,将文件中的每个单字存入map的key值中,value则是该单字在文本文件中出现次数,再定义一份排除字眼组成的set,将某单字放入map之前先确定该单字不在排除字集中。
//文本文件读取完毕后,显示一份单字清单,并显示各单字出现次数
//显示单字之前,允许用户查询某个单字是否存在于文本文件中

#include#include//读写文本文件
#include#include#include#includeusing namespace std;

void user_query(const map& m1);
void display_word_const(const map& m1,ostream &os); //以iofstream流作为函数参数时,一定要传入引用


int main()
{
	ifstream in_file("data.txt");
	if (!in_file)
	{
		cerr<< "无法打开文件"<< endl;
		return -1;
	}
	mapm1;
	sets1;
	vectorv1(6);
	cout<< "请输入排除字眼:"<< endl;
	string temps1;
	for (int i = 0; i< 6; i++)
	{
		cin >>temps1;
		v1.push_back(temps1);
	}
	//将排除字眼插入set中
	s1.insert(v1.begin(), v1.end());
	//常规向map输入的方法: cin>>twords; m1[mapstring]++;
	//从文件中向map输入: in_file>>twords; m1[mapstring]++;
	string mapstring;
	while(in_file >>mapstring)
	{
		if (s1.count(mapstring)) //set的count和map的count使用方法类似,返回参数mapstring在容器中出现的次数
		{
			continue; //跳过接下来的语句,重新进行迭代
		}
		m1[mapstring]++;
	}
	//查询map中是否存在某个单字
	user_query(m1);
	//display:
	display_word_const(m1, cout);

	system("pause");
	return 0;
}

void user_query(const map& m1)
{
	string search_word;
	cout<< "请输入想要搜寻的单字或者输入'q'以退出此程序: ";
	cin >>search_word;
	while (search_word.size() && search_word != "q") //第一个参数是确保search_word不为空,第二个参数是search_word不为程序退出条件q(同时因为string是字符串,所以应当是字符串"q")
	{
		map::const_iterator it = m1.find(search_word); //map的find函数,如果参数值在map中,则会返回一个iterator指向此位置,否则会返回end();
		if (it != m1.end()) //如果it == m1.end(),则说明search_word不存在于此map中
		{
			cout<< "Found "<< it->first
				<< " occurs "<< it->second
				<< " times"<< endl;
		}
		else
		{
			cout<< search_word<< " was not found in text"<< endl;
		}
		cout<< "请继续输入想要搜寻的单字(输入'q'退出)"<< endl;
		cin >>search_word;
	}
}

void display_word_const(const map& m1, ostream& os)
{
	map::const_iterator it_begin;
	map::const_iterator it_end;
	it_begin = m1.begin();
	it_end = m1.end();
	while (it_begin != it_end)
	{
		os<< it_begin->first<< " ( "<< it_begin->second<< " ) "<< endl;
		it_begin++;
	}
	os<< endl;
}

程序运行结果:

3.2

C++代码:

//3.2
//读取文本文件内容并将内容储存于vector中
//以字符串长度为依据,对vector进行排序
//定义一个function object并传给sort()进行升序排序 -- 自定义一个fuction object接受两个参数,当第一字符串的长度小于第二字符串的长度时,返回true
//打印排序后的vector内容
#include#include#include //sort()
#includeusing namespace std;

//fuction object;
class Lessthan
{
public:
	bool operator()(const string& s1, const string& s2) //重载运算符' () ',使得Lessthan()即为一个fucion object并可以以Lessthan()的形式传递给sort()作为参数
	{
		return s1.size()< s2.size() ? true : false; //如果s1.size()< s2.size()则返回true反之则返回false
	}
};

void display_vector(const vectorivec)
{
	vector::const_iterator it = ivec.begin();
	while (it != ivec.end())
	{
		cout<< *it<< " ";
		it++;
	}
	cout<< endl;
}

int main()
{
	ifstream in_file("data.txt");
	if (!in_file)
	{
		cerr<< "文件无法打开"<< endl;
		return -1;
	}
	vectorivec;
	//将文件中的内容输入到ivec中
	string word;
	while (in_file >>word) //终止条件为文件中没有内容继续输入
	{
		ivec.push_back(word); // 不知道vector数组的大小,使用push_back()进行插入是最好选择
	}
	cout<< "排序前:"<< endl;
	display_vector(ivec);
	//排序:
	sort(ivec.begin(), ivec.end(), Lessthan());
	//display:
	cout<< "排序后:"<< endl;
	display_vector(ivec);

	system("pause");
	return 0;
}

程序运行结果:

3.3

C++代码:

//3.3
//定义一个map,以家庭姓氏为key,value则是家庭所有小孩的名字。
//此map至少容纳六笔数据
//允许用户根据姓氏来查询,并得以打印map的每一笔数据
#include#include#include#includeusing namespace std;

void search_display(map>fn)
{
	map>::const_iterator it = fn.begin();
	string first_name;
	cout<< "输出姓氏:";
	cin >>first_name;
	while (it != fn.end())
	{
		if (first_name == it->first)
		{
			cout<< "找到了!"<< endl;
			break;
		}
		else
		{
			it++;
		}
	}
	if (it == fn.end())
	{
		cout<< "该姓氏不存在于map中"<< endl;
		return;
	}
	// first_name  --  it->first  second_namme -- it->second;
	vectortempvec(it->second);
	vector::const_iterator iter = tempvec.begin();
	while (iter != tempvec.end())
	{
		cout<< "姓名:"<< it->first<< " "<< *iter<< endl;
		iter++;
	}
}

int main()
{
	map>family_name;
	string first_name = "none";
	//储存数据过程
	cout<< "输入家庭姓氏(输入q退出储存程序): ";
	cin >>first_name;
	while (first_name != "q")
	{
		vectorv1;
		string last_name = "none";
		cout<< "输入家庭孩子的姓名(输入q退出输入进程): "<< endl;
		while (last_name != "q")
		{
			cin >>last_name;
			if (last_name != "q")
			{
				v1.push_back(last_name);
			}
			
		}
		family_name[first_name] = v1; //first_name对应的是key值,v1对应的是value值

		cout<< "输入家庭姓氏(输入q退出储存程序): ";
		cin >>first_name;
	}
	//搜寻打印过程
	search_display(family_name);


	system("pause");
	return 0;
}

程序运行结果:

3.4

C++代码:

//3.4
//利用istream_iterator从标准输入设备输入连续一连串整数 (cin) 
//利用ostream_iterator将其中的奇数写到某个文件,每个数值皆以空格分隔 (out_file1," ")
//再利用ostream_iterator将偶数写到另一个文件,每个数值单独放在一行 (out_file2, '\n')
#include#include#include// 使用istream_iterator<>和ostream_iterator<>#include#include
using namespace std;

int main()
{
	//容器
	vectorivec;
	//first;
	istream_iteratoris(cin);
	//last;
	istream_iteratoreof;
	//利用copy完成从标准输入设备输入
	cout<< "输入整数: "<< endl;
	copy(is, eof, back_inserter(ivec));
	
	fstream out_file1("data1.txt");
	fstream out_file2("data2.txt");
	if (!out_file1 || !out_file2)
	{
		cout<< "无法打开文件"<< endl;
		return 0;
	}

	vector::const_iterator it = ivec.begin();

	ostream_iteratoros1(out_file1, " ");
	ostream_iteratoros2(out_file2, "\n");

	vectortext1;
	vectortext2;
	while (it != ivec.end())
	{
		//奇数
		if (*it % 2 != 0)
		{
			text1.push_back(*it);
		}
		else
		{
			text2.push_back(*it);
		}
	}

	//输入到文件中
	copy(text1.begin(), text1.end(), os1);
	copy(text2.begin(), text2.end(), os2);


	system("pause");
	return 0;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:EssentialC++第三章习题-创新互联
文章分享:http://cdkjz.cn/article/dosipo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220