此题对重复电话号码进行计数并对各电话号码按照字典序升序输出,采用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; }