问题基本解决但是还有逻辑问题 我回继续修改弄好 了 就再贴上来
大家动用你们的智慧 继续想想优化方案吧及不足之处
大家动用你们的智慧 继续想想优化方案吧及不足之处
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[])
{
unsigned int num; // num up to 100000
int i,j,n,mark=1,k,len; // 各标记
char **ch=NULL,*pstr=NULL; // 字符指针存放指针
printf("请输入电话号码数!\n");
scanf("%d\n",&num);
ch=(char **)malloc(20*sizeof(char)); // 外加
for(i=0;i<num;i++)
{
*(ch+i)=(char *)malloc(20*sizeof(char)); // 动态分配内存
gets(ch[i]);
}
// 处理号码中的大写字母
for(i=0;i<num;i++)
{
len=strlen(ch[i]);
for(j=0;j<len;j++)
{
n=ch[i][j];
switch(n)
{
case 65: case 66: case 67:
ch[i][j]='2';break;
case 68: case 69: case 70:
ch[i][j]='3';break;
case 71: case 72: case 73:
ch[i][j]='4';break;
case 74: case 75: case 76:
ch[i][j]='5';break;
case 77: case 78: case 79:
ch[i][j]='6';break;
case 80: case 82: case 83:
ch[i][j]='7';break;
case 84: case 85: case 86:
ch[i][j]='8';break;
case 87: case 88: case 89:
ch[i][j]='9';break;
default: break;
}
}
// 除去字符串中的'-'
for(j=0;j<len;j++)
if(ch[i][j]=='-')
for(k=j+1;k<len;k++)
ch[i][k-1]=ch[i][k];
// 插入连接符
for(j=len-1;j>3;j--)
ch[i][j+1]=ch[i][j];
ch[i][j]='-';
ch[i][len+1]='\0';
}
// 按照字典中字母顺序输出
for(i=0;i<num;i++)
{
pstr=ch[i];
for(j=i;j<num-1;j++)
{
if(strcmp(ch[i],ch[j+1])<0)
pstr=ch[j+1];
else
if(strcmp(ch[i],ch[j+1])==0)
{
mark++;
pstr=ch[j+1];
}
}
if(mark==1)
{
printf("%s",pstr);
printf(" No duplicates \n");
}
else
printf("%s %d\n",pstr,mark);
mark=1;
}
return 0;
}
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[])
{
unsigned int num; // num up to 100000
int i,j,n,mark=0,k,len; // 各标记
char **ch=NULL,*pstr=NULL,*mid=NULL; // 字符指针存放指针
printf("请输入电话号码数!\n");
scanf("%d\n",&num);
ch=(char **)malloc(num*sizeof(char*)); // 外加
for(i=0;i<num;i++)
{
*(ch+i)=(char *)malloc(20*sizeof(char)); // 动态分配内存
gets(ch[i]);
}
// 处理号码中的大写字母
for(i=0;i<num;i++)
{
len=strlen(ch[i]);
for(j=0;j<len;j++)
{
n=ch[i][j];
switch(n)
{
case 65: case 66: case 67:
ch[i][j]='2';break;
case 68: case 69: case 70:
ch[i][j]='3';break;
case 71: case 72: case 73:
ch[i][j]='4';break;
case 74: case 75: case 76:
ch[i][j]='5';break;
case 77: case 78: case 79:
ch[i][j]='6';break;
case 80: case 82: case 83:
ch[i][j]='7';break;
case 84: case 85: case 86:
ch[i][j]='8';break;
case 87: case 88: case 89:
ch[i][j]='9';break;
default: break;
}
}
// 除去字符串中的'-'
for(j=0;j<strlen(ch[i]);j++)
if(ch[i][j]=='-')
{
for(k=j+1;k<strlen(ch[i]);k++)
ch[i][k-1]=ch[i][k];
ch[i][k]='\0';
}
// 插入连接符
for(j=strlen(ch[i])-1;j>3;j--)
ch[i][j+1]=ch[i][j];
ch[i][j]='-';
ch[i][strlen(ch[i])+1]='\0';
}
// 按照字典中字母顺序输出
for(i=0;i<num;i++)
{
if(ch[i]!=NULL)
pstr=ch[i];
for(j=i;j<num-1;j++)
if(strcmp(ch[i],ch[j+1])<0)
pstr=ch[j+1];
strcpy(mid,ch[i]); strcpy(ch[i],pstr); strcpy(pstr,mid);
for(k=i;k<num;k++)
if(strcmp(pstr,ch[k])==0)
{
ch[k]=NULL;
mark++;
}
if(mark==1)
{
printf("%s",pstr);
printf(" No duplicates \n");
}
else
printf("%s %d\n",pstr,mark);
mark=1;
}
return 0;
}
