XDOJ 135.拼数字排序

第一次写博客,本人小白一个,但我会不断学习的。
拼数字排序是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 <string.h>
int main(){
	int a[100]={0}; 
	int i=0,j,temp,cnt=0;  
 	char ch;
	ch=getchar(); //一个一个读,当时~~比较笨~~ 不会用gets,只会用这个
	while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
		ch = getchar(); 
	}
   	while(ch!= EOF && ch!='\r'&&ch!='\n'){ //读到了手动结束(windows是ctrl+z)或换行符时
   		if(ch>='0'&&ch<='9'){
   			a[i]=a[i]*10+ch-'0';//很重要,因为一个一个读的话连续的数字要拼接成整数
	   }
	   	ch = getchar();
		while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
			ch = getchar();//同上
			if(ch>='0'&&ch<='9'){
				i++;
				cnt++;
			}
		}
	}
	for(i=0;i<cnt;i++){
		for(j=0;j<cnt;j++){
			if(a[j]<a[j+1]){ 
				temp = a[j];      
				a[j] = a[j+1];      
				a[j+1] = temp;
			} 
		}
	}//简单的冒泡排序
	for(i=0;i<=cnt;i++){
		printf("%d ", a[i]);
	}
	return 0;
}

卡了一下午的原因是我不知道ch!=EOF这玩意儿干嘛的,导致我一直程序超时。
第一次就这么没了,大e了,没有闪。不过还是希望大佬多指点。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值