此题对重复电话号码进行计数并对各电话号码按照字典序升序输出,采用map一举两得。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<map>
#include<string>
using namespace std;
char match[]="22233344455566677778889999";
int main()
{
int n;
scanf("%d",&n);
char s[100]; //数组开大点
char tel[100]; //用string下面得到空
map<string,int> mp;
for(int j=0;j<n;j++)
{
scanf("%s",s);
int k=0;
int len = strlen(s);
char t;
for(int i=0;i<len;i++)
{
if(s[i]=='-')
continue;
else if(isdigit(s[i]))
t = s[i];
else t = match[s[i]-'A'];
tel[k++] = t;
}
tel[k]='\0'; //添加终结符
//cout<<"***"<<tel<<endl;
mp[tel]++;
}
map<string,int>::iterator p;
bool flag = false;
for(p=mp.begin();p!=mp.end();p++)
{
if(p->second > 1)
{
flag = true;
int cnt=0;
while(cnt<3)
{
printf("%c",p->first[cnt]);
cnt++;
}
printf("-");
while(cnt<7)
{
printf("%c",p->first[cnt]);
cnt++;
}
printf(" %d\n",p->second);
}
}
if(!flag) printf("No duplicates.\n");
return 0;
}