题意: 输入一组电话号码,有的用数字表示,有的用字母表示,有的既有数字也有大写字母,有的有“-”。那么我们的工作就是利用你的火眼金睛,找出每个电话号码出现的次数,并对出现次数超过1次的电话号码,以字典升序的方式输出。 例如310-1010,总共出现了两次3-10-10-10-10和F10101010。
分析:利用c++的map,map插入时已经按索引(key)排好序了。
代码:
#include<iostream>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
char str[] = {"22233344455566677778889999"};
int main(){
int n;
map<string,int> mp;
cin>>n;
while(n--){
string s,ss;
cin>>s;
int ct=0;
for(int i=0;i<s.size();i++){
if('0'<=s[i]&&s[i]<='9') ss.push_back(s[i]);
else if('A'<=s[i]&&s[i]<='Z') ss.push_back(str[s[i]-'A']);
}
ss.insert(3,1,'-');
mp[ss]++;
}
int flag=0;
for(map<string,int>::iterator it=mp.begin(); it!=mp.end(); it++){
if(it->second>1) {
flag=1;
cout<<it->first<<" "<<it->second<<endl;
}
}
if(!flag) cout<<"No duplicates."<<endl;
}