输出一个字符串中的数值
问题描述输出一个字符串中的数值(数值溢出输出“overflow”),每2个数值之间用空格分隔。 不要求处理符号。前导0不能输出,026应该输出26。 例如:
输入:5Pw4e++3h1DdA--735b6)0NF002bye 输出:5 4 3 1 735 6 0 2输入格式一个全部由可打印字符组成的字符串(但含有<回车>和<换行>),长度可能很长。
输出格式将该字符串中的所有数值分别输出,如果数值超过int可以表示的范围,则输出overflow,每2个数值之间用空格分隔。
样例输入
ge040k4Q+71bXfg7
3[-55O2g7t9922345605P9
样例输出40 4 71 7 3 55 2 7 overflow 9
#include <stdio.h> #include <iostream> #include <math.h> #include <string.h> using namespace std; //d0000d char MAX[15]="2147483647"; char s1[1005]; char s[105]; int main() { char ch; int h = 0,flag=0,i,j; while(scanf("%s",s1)!=EOF) //含有<回车>和<换行> 就一行一行输入 { int len = strlen(s1); for(j=0;j<len;j++) { if((s1[j]>='0') && (s1[j]<='9')) { s[h] = s1[j]; h++; } else { if(h>0) { for(i=0;i<h;i++) if(s[i]!='0' || i==h-1) break; if(h-i<10) { for(i;i<h;i++) printf("%c",s[i]); printf(" "); } else if(h-i>10) printf("overflow "); else { for(i;i<h;i++) if(s[i]>MAX[i]) { printf("overflow "); flag = 1; break; } if(flag==0) { for(i;i<h;i++) printf("%c",s[i]); printf(" "); } else flag = 0; } } h = 0; } } if(h!=0) { for(i=0;i<h;i++) if(s[i]!='0' || i==h-1) break; if(h-i<10) { for(i;i<h;i++) printf("%c",s[i]); printf(" "); } else if(h-i>10) printf("overflow "); else { for(i;i<h;i++) if(s[i]>MAX[i]) { printf("overflow "); flag = 1; break; } if(flag==0) { for(i;i<h;i++) printf("%c",s[i]); printf(" "); } else flag = 0; } h = 0; } } return 0; }