问题基本解决但是还有逻辑问题 我回继续修改弄好 了 就再贴上来
大家动用你们的智慧 继续想想优化方案吧及不足之处
大家动用你们的智慧 继续想想优化方案吧及不足之处
#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; }