解题思路:

                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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论