这一题有借鉴网上优秀大神的答案,因为我用cin.get()好像怎样都不行,所以去学了下他们怎样用while (scanf_s("%s", str)!=EOF),然后自己尝试去写了出来。
##题目描述:
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。 对这些分割得到的整数,依从小到大的顺序排序输出。
题解:
先判断是否为5,是的话就跳到下一个数,再用sum=sum*10+下一个数,这条万金油狮子去记录没遇到5之前的组合数的大小。然后用数组记录,再从小到大排序这个数组,我直接用了STL的算法了,偷了点懒。也可以自己重载一个排序算法的。代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
char str[1001];
int num[1001],sum,k=0;
while (scanf_s("%s", str)!=EOF)
{
for (int i = 0; str[i] != '\0';)
{
if (str[i] == '5')
{
i++;
continue;
}
sum = 0;
while (str[i] != '5'&&str[i]!='\0')
{
sum = sum * 10 + str[i]-'0';
i++;
}num[k++] = sum;
}
sort(num, num + k);
for (int m = 0; m < k; m++)
{
if(m+1==k)
{
cout<<num[m];
}
else{
cout << num[m] << " ";
}
}
cout<<endl;
}
return 0;
}