#include<vector>
#include<iostream>
#include<string>
#include<algorithm>
#include<fstream>
#include<iterator>
using namespace std;
class GreaterThan
{
public:
GreaterThan(int sz=6):_size(sz){}
int size(){return _size;}
bool operator()(const string &s1){return s1.size()>_size;}
private:
unsigned int _size;
};
class PrintElem
{
public:
PrintElem(int lineLen=8):_line_length(lineLen),_cnt(0){}
void operator()(const string &elem)
{
++_cnt;
if(_cnt % _line_length==0)
cout<<'\n';
cout<<elem<<" ";
}
private:
int _line_length;
int _cnt;
};
class LessThan
{
public:
bool operator()(const string& s1,const string& s2){return s1.size()<s2.size();}
};
typedef vector<string> textwords;
void process_vocab(vector<textwords> *pves)
{
if(!pves)
return;
vector<string> texts;
vector<textwords>::iterator iter;
for(iter=pves->begin();iter!=pves->end();iter++)
{
copy((*iter).begin(),(*iter).end(),back_inserter(texts));
}
sort(texts.begin(),texts.end());
for_each(texts.begin(),texts.end(),PrintElem());
cout<<"\n\n";
vector<string>::iterator it;
it=unique(texts.begin(),texts.end());
texts.erase(it,texts.end());
for_each(texts.begin(),texts.end(),PrintElem());
cout<<"\n\n";
stable_sort(texts.begin(),texts.end(),LessThan());
for_each(texts.begin(),texts.end(),PrintElem());
cout<<"\n\n";
int cnt=0;
count_if(texts.begin(),texts.end(),GreaterThan());//计数
cout<<"numbers greater than six "<<cnt<<endl;
static string rw[]={"the","but","and","or","if"};
vector<string> remove_words(rw,rw+5);
vector<string>::iterator its=remove_words.begin();
for(;its!=remove_words.end();its++)
{
count(texts.begin(),texts.end(),*its);
cout<<cnt<<" "<<*its<<endl;
texts.erase(remove(texts.begin(),texts.end(),*its),texts.end());
}
for_each(texts.begin(),texts.end(),PrintElem());
cout<<"\n\n";
}
#include<string>
void mian()
{
vector<textwords> sample;
vector<string> t1;
vector<string> t2;
string t1fn,t2fn;
cout<<"text1";
cin>>t1fn;
cout<<"text2";
cin>>t2fn;
ifstream infile1(t1fn.c_str());
ifstream infile2(t2fn.c_str());
istream_iterator<string > input_set1 (infile1), eos;
istream_iterator<string > input_set2 (infile2);
copy(input_set1,eos,back_inserter(t1));
copy(input_set2,eos,back_inserter(t2));
sample.push_back(t1);
sample.push_back(t2);
process_vocab(&sample);
system("pause");
}