测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A41119. 提取数字串按数值排序

填空题 较难

题目描述

提取数字串按数值排序

题目描述

给定一个字符串,请将其中的所有数字串提取,并将每个数字串作为整数看待(假设可以用int 表示),按从小到大顺序输出结果,输出的整数之间以逗号间隔。如果没有数字,则输出0;例如:*1234.345#6781ad9jk81-11101?aght88ir09kp,其中的整数包括:1234,345,6781,9,81,11101,88,9,从小到大排序后,应该输出:

9,9,81,88,345,1234,6781,11101

输入格式

在一行内输入一串符号,长度不大于300。输入数据保证提取的整数不超过109。

输出格式

从小到大排序的整数序列,如果没有数字,则输出0。

样例输入

*1234.345#6781ad9jk81-11101?aght88ir09kp

样例输出

9,9,81,88,345,1234,6781,11101

参考答案

#include <iostream> #include <stdio.h> using namespace std; #include <cmath> int i,j=0; #define A 300+5 #include <cstring> int main() { long long figure[A]; char ch[A]; gets(ch); int count=0,sum=0; int len=strlen(ch); ch[len]='a'; //方便判定,否则不会跳转至 “1” for(i=0;i<=len;i++) { if(ch[i]>='0'&&ch[i]<='9') { if(count==0) { sum+=ch[i]-'0'; } else { sum=sum*10+ch[i]-'0'; } count++; } else if(count!=0) // "1" { figure[j++]=sum; sum=0;count=0; } } int k; for(i=1;i<j;i++) { for(k=0;k<j-i;k++) { int temp; if(figure[k]>figure[k+1]) { temp=figure[k]; figure[k]=figure[k+1]; figure[k+1]=temp; } } } if(j!=0) { for(i=0;i<j-1;i++) { cout<<figure[i]<<","; } cout<<figure[i]<<endl; } else cout<<0<<endl; return 0; }
上一题 下一题