这题意思很简单,就是找出相同的电话号码,统计其重复数组,并按字典序输出,如果没有重复,就输出No duplicates. 容易出现问题的地方就是输出时候的控制。
以下是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int T;
char str[100010][10];
int cmp(void const *a,void const *b)
{
char *pa=(char *)a;
char *pb=(char *)b;
return strcmp(pa,pb);
}
int main()
{
int i,j,k;
char ch;
scanf("%d",&T);
getchar();
for(i=0;i<T;i++)
{
j=0;
while((ch=getchar())!='\n')
{
if(isdigit(ch)) str[i][j++]=ch;
else if(isupper(ch))
{
switch(ch)
{
case 'A':case 'B':case 'C':str[i][j++]='2';break;
case 'D':case 'E':case 'F':str[i][j++]='3';break;
case 'G':case 'H':case 'I':str[i][j++]='4';break;
case 'J':case 'K':case 'L':str[i][j++]='5';break;
case 'M':case 'N':case 'O':str[i][j++]='6';break;
case 'P':case 'R':case 'S':str[i][j++]='7';break;
case 'T':case 'U':case 'V':str[i][j++]='8';break;
case 'W':case 'X':case 'Y':str[i][j++]='9';break;
}
}
if(j==3) str[i][j++]='-';
}
str[i][j]='\0';
}
qsort(str,T,sizeof(char)*10,cmp);
k=0;
for(i=0;i<T;i++)
{
if(i<T-1&&strcmp(str[i],str[i+1])!=0)
continue;
else if(i==T-1)
continue;
else
{
k=1;
j=1;
while(strcmp(str[i],str[i+1])==0) j++,i++;
printf("%s %d\n",str[i],j);
i-=1;
}
}
if(k==0)
printf("No duplicates.\n");
return 0;
}
本文详细介绍了如何通过编程解决电话号码重复统计问题,并按照字典序进行输出。包括输入处理、数据结构选择及输出控制策略。
633

被折叠的 条评论
为什么被折叠?



