输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0).
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出.
Input输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000.
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成.
#pragma warning(disable : 4996)
#include <stdio.h>
#include <string.h>
unsigned long a[100] = {0};//拆分后得到的数组
int j = 0;//记录拆分出多少个值
void swap(unsigned long* a, unsigned long* b)//两数交换位置
{
unsigned long t;
t = *a;
*a = *b;
*b = t;
}
void paixu(unsigned long a[],int m)//排序,a为数组,m为数组的长度
{
int i, j;
for (i = 0; i < m-1; i++)
{
for (j = 0; j < m-1-i; j++)
{
if (a[j] > a[j+1])
swap(&a[j], &a[j+1]);
}
}
}
void split(char str[], char c)//str 要处理的字符串, c参照哪个字符分割
{
unsigned long sum = 0;
int len = strlen(str);//字符串的长度
for (int i = 0; i < len; i++) //遍历所有字符
{
if (str[i] != c) //如果第i个位置不是分割符 值累加
sum = str[i] - '0' + sum * 10;
if (str[i] == c)//如果第i个位置是分割符的处理
{
if (i == 0) continue;//如果是第一个字符为分割不处理
if (str[i - 1] != c)//如果前一个不是分割符,此时说明i之前的是一组分开的数据了
{
a[j] = sum; j++; sum = 0;//此时将sum加入数组中,j加1,sum清0
}
}
}
}
int main()
{
char str[1000]; //输入的字符串 0051231232050775
scanf("%s",str);
split(str,'5');
paixu(a,j);
for (int i = 0; i < j; i++)
printf("%d ",a[i]);
}