![]() |
#2
peach54602013-04-12 19:45
|

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool isShorter (const string&s1,const string&s2)
{
return s1.size()<s2.size();
}
bool GT6(const string &s)
{return s.size()>=6;}
string make_plural( size_t t, const string&word,const string&ending){
return t==1?word:word+ending;
}
int main(){
string x;
vector<string>vec;
while(cin>>x){
vec.push_back(x);
}
sort(vec.end(),vec.end());
vector<string>::iterator end_unique=
unique(vec.begin(),vec.end());
vec.erase(end_unique,vec.end());
stable_sort(vec.begin(),vec.end(),isShorter);
vector<string>::size_type wc=count_if(vec.begin(),vec.end(),GT6);
cout<<wc<<" "<<make_plural(wc,"word","s")<<
"6 characters or longer"<<endl;
vector<string>::iterator it=vec.begin();
for(;it!=vec.end();++it)
cout<<*it<<" ";
return 0;
}
#include<vector>
#include<algorithm>
using namespace std;
bool isShorter (const string&s1,const string&s2)
{
return s1.size()<s2.size();
}
bool GT6(const string &s)
{return s.size()>=6;}
string make_plural( size_t t, const string&word,const string&ending){
return t==1?word:word+ending;
}
int main(){
string x;
vector<string>vec;
while(cin>>x){
vec.push_back(x);
}
sort(vec.end(),vec.end());
vector<string>::iterator end_unique=
unique(vec.begin(),vec.end());
vec.erase(end_unique,vec.end());
stable_sort(vec.begin(),vec.end(),isShorter);
vector<string>::size_type wc=count_if(vec.begin(),vec.end(),GT6);
cout<<wc<<" "<<make_plural(wc,"word","s")<<
"6 characters or longer"<<endl;
vector<string>::iterator it=vec.begin();
for(;it!=vec.end();++it)
cout<<*it<<" ";
return 0;
}
这段代码用于 删除输入文本中重复的单词 ,并统计出长度大于6的单词,最后按长度的顺序输出单词;
但是在最后按长度顺序输出时出现了问题。
我当输入 dd dd ddd ddd dddd dddd 时输出是 dd ddd dddd,符合预期的效果;
但是当我输入 dd ddd dddd dd ddd dddd时输出是dd dd ddd ddd dddd dddd,不符合预期的效果;
为什么当两个相同的相邻时,erase 起作用了。
不相邻时。erase 没有起作用。