//排序 //可以用到<ctype.h>中的一些函数 //isalnum() 功能:判断字符变量c是否为字母或数字 //说明:当c为数字0-9或字母a-z及A-Z时,返回非零值,否则返回零。 //isalpha() 判断字符ch是否为英文字母 //isdigit() 判断字符c是否为数字 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #include<algorithm> using namespace std; char s[100002][50]; int num[28]={0,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9,0}; int cmp(const void* _a,const void* _b) { char *a=(char *)_a; char *b=(char *)_b; return strcmp(a,b); } int main() { freopen("E.9.dat","r",stdin); freopen("out.txt","w",stdout); int n; while(scanf("%d",&n)==1) { char temp[50]; int i,len,j,k,end=0,t=1; //存储输入数据,并进行预处理 for(i=0;i<n;i++) { scanf("%s",temp); len=strlen(temp); for(j=0,k=0;j<len;j++) { if(isalpha(temp[j])) { s[i][k++]=num[temp[j]-'A'+1]+'0'; } if(temp[j]>='0'&&temp[j]<='9') { s[i][k++]=temp[j]; } } s[i][k]='/0'; } //排序 qsort(s,n,sizeof(s[0]),cmp); //设置s[n]用于比较最后一个号码 s[n][0]='/0'; /*printf("----/n"); for(i=0;i<n;i++) printf("%s/n",s[i]); printf("----/n");*/ //查找,若有连续两个以上相同的号码,则将其按规定输出 //end用于判断是否有重复号码,end值不变则说明没有重复号码 for(i=1;i<=n;i++) { if(strcmp(s[i-1],s[i])==0) { t++; end=1; } else { if(t>1) { end=1; for(j=0;j<7;j++) { if(j==2) printf("%c-",s[i-1][j]); else printf("%c",s[i-1][j]); } printf(" %d/n",t); } t=1; } } if(end==0) printf("No duplicates./n"); } return 0; }