拼数字并排序

拼数字并排序

问题描述
对于输入的字符串(只包含字母和数字),将其中的连续数字拼接成整数,然后将这些整数按从大到小顺序输出。
例如字符串“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^ _ ^加油!!!

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页