拼数字并排序
问题描述
对于输入的字符串(只包含字母和数字),将其中的连续数字拼接成整数,然后将这些整数按从大到小顺序输出。
例如字符串“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<string.h>
#include<math.h>
int main()
{
/**************************函数参数********************************************
*str[100] 原始输入数组
*xstr[100] 将数组各项顺序颠倒 ,便于读取数字
*num[50] 存放读取的数字
*count 测量数组的长度
*i,j,k,l 临时变量
*flag 标志位
*******************************************************************************/
char str[100],xstr[100];
int num[50],count;
int i,j,k,l,flag;
/*初始化*/
flag=0;
j=0;
for(i=0;i<50;i++)
num[i]=0;
/*输入*/
scanf("%s",str);
/*测量数组长度*/
count=strlen(str);
/*将数组倒置以便于读取数字*/
for(i=0;i<count;i++)
xstr[count-1-i]=str[i];
xstr[count]='\0';
/*读取数字*/
for(i=0;i<count;i++){
if(xstr[i]>='0'&&xstr[i]<='9'){
flag++;
if(flag){
num[j]=num[j]+(xstr[i]-48)*(int)pow(10,flag-1);
}
}
else{
if(flag!=0)
j++;
flag=0;
}
}
/*排序*/
for(i=0;i<j-1;i++)
for(k=i;k<j;k++)
if(num[i]<num[k]){
l=num[i];
num[i]=num[k];
num[k]=l;
}
/*打印*/
for(i=0;i<j;i++)
printf("%d ",num[i]);
return 0;
}
@ RoboMaster!十兮
持续更新中,希望我的思路可以被你们借鉴而不是copy^ _ ^加油!!!