主要在于对字符串的处理……
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char map[]="2223334445556667077888999";
char tel[100000][9];
int cmp(const void *str1, const void *str2)
{
return strcmp((char *)str1, (char *)str2);
}
void Change(char str[], int n)
{
int i, j;
for(i=0, j=0; j<8; i++)
{
if( str[i]=='-' )
continue;
if( str[i]>='A'&&str[i]<='Y')
str[i]=map[str[i]-'A'];
if( j==3 )
{
tel[n][j]='-';
j++;
}
tel[n][j]=str[i];
j++;
}
tel[n][j]='\0';
}
int main()
{
int i, j ,n;
char t[100];
bool flag=false;
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%s", t);
Change(t, i);
}
qsort(tel, n, 9, cmp);
i=0;
while( i<n )
{
j=i;
while( i<n && strcmp(tel[i], tel[j])==0)
i++;
if( i-j>1 )
{
printf("%s %d\n", tel[j], i-j);
flag=true;
}
}
if( !flag )
printf("No duplicates.\n");
}