#include
#include
#include
#define type int
char transfer[26]={2,2,2,
3,3,3,
4,4,4,
5,5,5,
6,6,6,
7,7,7,7,
8,8,8,
9,9,9,9};
typedef struct repeat
{
char num[8];
struct repeat * next;
}RPT;
void std(char * in,char *out)
{
int i,j=0;
char c;
out[7]=0;
for(i=0;i {
while(in[j]=='-')j++;
c=in[j++];
if(c>=65)
{
out[i]=transfer[c-65];
}
else
{
out[i]=c-48;
}
}
return;
}
int strcasecmp(char * s1,char *s2)
{
int i=0;
while(s1[i])
{
if(s1[i]>s2[i])return 1;
else if(s1[i]<s2[i]) return -1;
i++;
}
if(s2[i]==0)return 0;
else return -1;
}
int main(void)
{
RPT * rhead;
short intbytes;
type *******head=NULL;//相当于trie树的东西
type * p;
RPT *rp,*tmprp,*tmprp1;
int n,i,j,count;
char unstd[20];
char stdn[9];
intbytes=sizeof(type)*10;
head=(type*******)malloc(intbytes);
memset((void*)head,0,intbytes);
rp=rhead=(RPT*)malloc(sizeof(RPT));
rp->num[0]=0;
rp->next=NULL;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",unstd);
std(unstd,stdn);
//1234567出现的次数存放在head[1][2][3][4][5][6][7]里面
p=(type*)head;
for(j=0;j<6;j++)
{
if(0==p[stdn[j]])
{
p[stdn[j]]=(type)malloc(intbytes);
memset((void*)p[stdn[j]],0,intbytes);
}
p=(type*)p[stdn[j]];
}
count=++p[stdn[6]];
//如果count==2,则需要在repeat裢表中创建一个结点
if(count==2)
{
rp=(RPT*)malloc(sizeof(RPT));
memcpy(rp->num,stdn,8);
//将rp结点按字典顺序插入repeat裢表中
tmprp1=rhead;
tmprp=rhead->next;
while(tmprp)
{
if(strcasecmp(rp->num,tmprp->num)>0)
{
tmprp1=tmprp;
tmprp=tmprp->next;
}
else
{
break;
}
}
rp->next=tmprp1->next;
tmprp1->next=rp;
}
}
rp=rhead->next;
if(rp==NULL)
{
printf("No duplicates.\n");
}
else
{
while(rp)
{
memcpy(stdn,rp->num,8);
printf("%d%d%d-%d%d%d%d %d\n",rp->num[0],rp->num[1],rp->num[2],rp->num[3],rp->num[4],rp->num[5],rp->num[6],head[stdn[0]][stdn[1]][stdn[2]][stdn[3]][stdn[4]][stdn[5]][stdn[6]]);
rp=rp->next;
}
}
return 0;
}
就没人看下吗,。。。。。。