64,685
社区成员
发帖
与我相关
我的任务
分享
#include<algorithm>
#include<fstream>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
inline bool isshorter(const string &s1, const string &s2) {
return s1.size() < s2.size();
} //用于将单词按长度排序的比较函数
inline bool GT4(const string&s) {
return s.size()>=4;
} //确定给定单词的长度是否小于4
inline string make_plural(size_t ctr, const string &word, const string &ending) {
return ctr == 1 ? word : word + ending;
} //如果ctr不为1,返回word的复数版本
//main 函数接受文件名为参数
int main(int argc, char* argv[]) {
if(argc < 2) {
cerr << "no input 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;
while(infile >> word) {
words.push_back(word);
}
sort(words.begin(),words.end()); //对输入排序,以便去除重复单词
words.erase(unique(words.begin(), words.end()), words.end()); //使用算法unique对元素重新排序并返回一个迭代器,表示无重复的单词范围的结束
//erase操作使用该迭代器删除输入序列中的单词
stable_sort(words.begin(), words.end(), isshorter); //将单词按长度顺序,等长的单词按字典顺序排列
vector<string>::size_type wc = count_if(words.begin(), words.end(), GT4); //计算并输出长度不小于4的单词数目
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 << " " << endl;
}
return 0;
}