一道练手小题,来源XDOJ,写的不咋的

问题描述

对于输入的字符串(只包含字母和数字),将其中的连续数字拼接成整数,然后将这些整数按从大到小顺序输出。
例如字符串“abc123d5e7f22k9”中共有5个数字123,5,7,22,9,因此应输出123 22 9 7 5。

输入说明

输入为一个字符串,字符串长度不超过100,其中最长的连续数字不超过10个,字符串中至少包含1个数字。

输出说明

对于输入的字符串,在一行上输出排序结果,整数间以一个空格间隔。

输入样例

abc123d5e7f22k9

输出样例

123 22 9 7 5

题解

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
    char input[101];
    int i,j=0,count=0;
    scanf("%s",input);
    int length=strlen(input);
    char num1[50][10];
    for(i=0;i<length;i++)
    {
        if(isdigit(input[i])!=0)
        {
            num1[count][j]={input[i]};
            j++;
        }
        if(isdigit(input[i])!=0 && isdigit(input[i+1])==0)
        {
            j=0;
            count++;
        }
    }
    int k;
    int num2[count];
    for(k=0;k<=count;k++)
    {
        num2[k]=atoi(num1[k]);
    }  
    int p,q,temp;
    for(p=0;p<count;p++)
    {
        for(q=0;q<count-p;q++)
        {
            if(num2[q]<num2[q+1])
            {
                temp=num2[q];
                num2[q]=num2[q+1];
                num2[q+1]=temp;
            }
        }
    }
    int r;
    for(r=0;r<count;r++)
    {
        printf("%d ",num2[r]);
    }
    return 0;
}