解题思路:
1.处理 0 的个数,遍历到0 的时候,判断 左右是否为 数字,为数字 直接continue,不为数字 直接 zero++, zero 表示是0的个数
2.用count变量 记录0 以外的数字 的个数。之后malloc 申请数组空间
3.处理1-9,遍历到1-9范围的数字直接加到temp变量中,遍历到数字以外的 字符时候(此时temp即为字符中的数字),将temp加入到res数组当中,
4.qsort之后,遍历输出即可
注意事项:
字符为0的情况,单独处理,测试用例里面 貌似没有0 的情况
参考代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> int cmp(const void *a,const void *b){ return *(int*)a - *(int*)b; } int main() { char str[300]; scanf("%s",str); int index=0,temp=0,count=0; for(int i=0;str[i]!='\0';i++){ if( str[i]>='0' && str[i]<='9' ){ temp=1; break; } } if(temp==0){ printf("0"); return 0; } temp=0; int zero=0; int j=0; for( j=0;j<strlen(str)-1;j++){ if(str[j]=='0'){ if(str[j-1]>='1' && str[j]<='9' && j-1>0){ continue; }else if(str[j+1]>='1' && str[j]<='9' && j+1<strlen(str)){ continue; }else{ zero++; } } } for(int i=0;str[i]!='\0';i++){ if( str[i]>='0' && str[i]<='9' ){ temp*=10; temp+=(str[i] - 48); } if( !(str[i]>='0' && str[i]<='9') && temp!=0 ){ count++; //printf("%d ",temp); temp=0; } if(i==strlen(str)-1 && (str[i]>='0' && str[i]<='9')){ count++; temp=0; } } int *res=malloc(sizeof(int ) * (count+zero)); temp=0; for(int i=0;i<zero;i++) res[index++]=0; for(int i=0;str[i]!='\0';i++){ if( str[i]>='0' && str[i]<='9' ){ temp*=10; temp+=(str[i] - 48); } if( !(str[i]>='0' && str[i]<='9') && temp!=0){ res[index++]=temp; //printf("%d ",temp); temp=0; } if(i==strlen(str)-1 && (str[i]>='0' && str[i]<='9')){ res[index++]=temp; //printf("%d ",temp); temp=0; } } qsort(res,count,sizeof(int) ,cmp); for(int i=0;i<count+zero;i++){ printf("%d",res[i]); if(i!=count-1) printf(","); } // printf("\ntemp=%d",zero); return 0; }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:624 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1323 |
模拟计算器 (C语言代码)浏览:2366 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:712 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:1108 |
众数问题 (C语言代码)浏览:717 |
1202题解浏览:689 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:550 |
1074(纳闷了,答案错误,求指教)浏览:384 |
三角形 (C语言代码)浏览:722 |