问题描述
对于输入的字符串(只包含字母和数字),将其中的连续数字拼接成整数,然后将这些整数按从大到小顺序输出。
例如字符串“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 <math.h> #include <string.h> #include <stdlib.h> void sort(int x[], int n); void print(int x[], int n); int main() { int sum = 0; char a[100]; scanf("%s",&a); int i, j; int len = strlen(a); int b[10]={0}, n=0; int flag=0; for(i=0,j=0;i<len;i++) { if(a[i]-48>=0&&a[i]-48<=9)//如果是数 { sum = sum*10+(a[i]-48); flag=1; } if(flag==1&&(a[i+1]-48<0||a[i+1]-48>9))//前面是数,后面是字母 { b[j]=sum;//printf("#%d",sum); sum = 0; n = j; j++; flag = 0; } } // printf("%d %d", n, j); sort(b,n+1); print(b,n+1); return 0; } void sort(int x[], int n)//选择排序 { int i, j, k, t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(x[k]<x[j]){ k=j; } if(k!=i){ t=x[i],x[i]=x[k],x[k]=t; } } } void print(int x[], int n) { int i; for(i=0;i<n;i++) { printf("%d ",x[i]); } }