第一次写博客,本人小白一个,但我会不断学习的。
拼数字排序是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了,没有闪。不过还是希望大佬多指点。