您的位置:首页 > 其它

ZOJ 3700 Ever Dream(字符串)

2013-04-20 17:38 274 查看
普通的字符串处理

用map比较方便

#include <iostream>
#include <memory.h>
#include <map>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=105;
char buf[maxn];
map<string,int>cnt;
map<int,vector<string> >mvs;
int main(){
int t,n;
scanf("%d",&t);
while(t--){
cnt.clear();
mvs.clear();
scanf("%d",&n);
getchar();
while(n--){
gets(buf);
int len=strlen(buf);
for (int i=0;i<len;++i){
if(!isalpha(buf[i]))buf[i]=' ';
}
char *str=strtok(buf," ");
while(str){
string s=str;
for(int i=0;i<s.size();++i){
s[i]=tolower(s[i]);
}
cnt[s]++;
str=strtok(NULL," ");
}
}

map<string,int>::iterator it=cnt.begin();
for(;it!=cnt.end();++it){
if(it->second>=2){
mvs[it->second].push_back(it->first);
}
}
map<int,vector<string> >::reverse_iterator it2=mvs.rbegin();
int c=0;
for(;it2!=mvs.rend();++it2){
vector<string>v;
int maxv=0;
for(int i=0;i<it2->second.size();++i){
maxv=max(maxv,(int)(it2->second[i].size()));
}
for(int i=0;i<it2->second.size();++i){
if(it2->second[i].size()==maxv){
v.push_back(it2->second[i]);
}
}
if(c>0)printf(" ");
if(v.size()>1){
sort(v.begin(),v.end());
printf("%s",v[v.size()-2].c_str());
}else{
printf("%s",v[0].c_str());
}
++c;
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: