#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void * elem1 , const void * elem2)
{
return (strcmp((char * )elem1 , (char * )elem2 ));
}
int main(int argc, char *argv[])
{
char tmp[80], telNote[100001][9];
char map[]="22233344455566677778889999";
int n, k, i, j, count, duplicate;
scanf("%d",&n);
for( i = 0 ; i<100001 ; i++)
memset(telNote[i],0,sizeof(telNote[i]));
for( k=0 ; k<n ; k++ )
{
scanf("%s",tmp);
//电话号码标准化
for( i=0,j=0 ; tmp[i]!='\0' ; i++)
{
if( tmp[i]>='0' && tmp[i]<='9' ) telNote[k][j++] = tmp[i] ;
else if(tmp[i]>='A'&&tmp[i]<='Z') telNote[k][j++] = map[tmp[i]-'A'] ;
}
}
//电话号码本排序
qsort(telNote, n, 9, compare);
//比较是否有重复的电话
k = 0;
duplicate = 0;
while( k<n )
{
i = k;
j = k+1;
count = 0;
while( j<n && strcmp(telNote[i],telNote[j])==0 )
{
count++;
j++;
}
if(count!=0)//有重复,输出
{
duplicate = 1;
printf("%c%c%c-%c%c%c%c %d\n",telNote[k][0],telNote[k][1],telNote[k][2],telNote[k][3],telNote[k][4],telNote[k][5],telNote[k][6],count+1);
//printf("%s-%s %d",substr(0,3),substr(3,4),count);
}
k = j ;
}
if( duplicate==0 ) printf("No duplicates.\n");
system("PAUSE");
return 0;
}
Q1:memset的使用。使用字符串数组的时候要注意初始化,或者在最后加'\0'
memset的原型:extern void *memset(void *buffer, int c, int count);