C++ Primer 第11章 习题11.9

//泛型算法中对容器元素从新排序的算法
//11.9.cpp
//读入文本文件
//统计长度不小于4的单词,并输出输入序列中不重复的单词
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;

//用于将单词按长度排序的比较函数
bool isShorter(const string &s1,const string &s2)
{
	return s1.size()<s2.size();
}

//确定给定单词的长度是否不小于4
bool GT4(const string &s)
{
	return s.size()>=4;
}

//如果ctr不为1,返回word的复数版本
string make_plural(size_t ctr,const string &word,
								const stirng &ending)
{
	return (ctr==1)?word:word+ending;
}

//main函数接受文件名为参数
int main(int argc,char **argv)
{
	//检查命令行参数个数
	if(argc<2)
	{
		cerr<<"No inpust file!"<<endl;
		return EXIT_FAILURE;
	}

	//打开输入文件
	ifstream inFile;
	inFile.open(argv[1]);
	if(!inFile)
	{
		cerr<<"Can not open input file!"<<endl;
		return EXIT_FAILURE;
	}

	vector<string> words;
	string word;
	//读入要分析的输入序列,并存放在vector容器中
	while(inFile>>word)
		words.push_back(word);

	//对输入排序以便去除重复的单词
	sort(words.begin(),words.end());

	//使用算法unique对元素从新排序并返回一个迭代器
	//表示无重复的单词范围的结束
	//erase操作使用该迭代器删除输入序列中重复的单词
	words.erase(unique(words.begin(),words.end()),words.end());

	//将单词按长度排序,等长的单词按字典顺序排序
	stable_sort(words.begin(),words.end(),isShorter);

	//计算并输出长度不小于4的单词的数目
	vector<string>::size_type wc=
		count_if(words.begin(),words.end(),GT4);
	cout<<wc<<" "<<make_plural(wc,"word","s")
		<<"4 characters or longer"<<endl;

	//输出输入序列中不重复的单词
	cout<<"unique words:"<<endl;
	for(vector<string>::iterator iter=words.begin();
		iter!=words.end();++iter)
		cout<<*iter<<" ";
	cout<<endl;
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值