题目:

C++代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
//i,j为循环变量,num为分隔后存储整数的数组下标
int i,j,num;
//输入的一行数字,长度最大为1000
char input_line[1000];
//存储分隔结果,分隔后最多得到500个数
string result_num[500];
while(cin>>input_line){
num=0;
//获取输入的数据长度
int len=strlen(input_line);
//用于存储分隔开的整数
string temp="";
//标识前面数字是否是0,为了处理分隔后的'0'
bool flag=true;
for(i=0;i<len;i++){
//要判断是否添加整数的两种情况,遇到字符'5',或者数据结束
if(input_line[i]=='5'){
//为'5'啥也不做
if(temp!=""){
result_num[num]=temp;
num++;
temp="";
flag=true;
}
}else if(i==len-1){
if(temp=="0"){
temp="";
}
temp+=input_line[i];
result_num[num]=temp;
num++;
temp="";
flag=true;
}else{
if(flag){
if(input_line[i]=='0'){
temp="0";
continue;
}else{
temp="";
flag=false;
temp+=input_line[i];
}
}else{
temp+=input_line[i];
}
}
}
//对分隔结果从小到大冒泡排序
for(i=0;i<num-1;i++){
for(j=0;j<num-i-1;j++){
//前者大于后者交换条件要么是前者长度大,要么长度一样前者直接比较大于后者
if(result_num[j].length()>result_num[j+1].length() || result_num[j].length()==result_num[j+1].length() &&result_num[j]>result_num[j+1]){
temp=result_num[j];
result_num[j]=result_num[j+1];
result_num[j+1]=temp;
}
}
}
//输出结果
for(i=0;i<num-1;i++){
cout<<result_num[i]<<" ";
}
//最后一个整数后无空格
cout<<result_num[num-1]<<endl;
}
return 0;
}
运行结果:
