1259 - C语言10.29
时间限制 : 1 秒
内存限制 : 32 MB
输入一个字符串,这个字符串包含了数字和非数字字符。例如:
a123x456 17960? 302tab5876
将其中连续的数字作为一个整数,依次存放到一个数组中,不妨将这个数组命名为a。对于以上的示例字符串,123存放在a[0]中,456放在a[1]中,余此类推。统计共有多少个整数,并依次输出这些整数。
题目输入
只有一行,符合题目描述的一个字符串。输入保证没有整数包含前导0,且整个字符串中每一组连续的数字数量不超过5个,加号(+)和减号(-)不表示整数的正负号。字符串的长度不超过500。
题目输出
第一行输出共有多少个整数,第二行依次输出这些整数,在每个整数后输出一个空格。
请注意行尾输出换行。
输入/输出样例
输入格式
qwer256 ci 23xxTI10999x P2q5t7
输出格式
6 256 23 10999 2 5 7
C语言解答
#include<stdio.h> #include<string.h> int main() { char q[510],a[510][510]; int i,j=0,k=0,s=0; gets(q); for(i=0;i<strlen(q);i++) { if(!(q[i]>='0'&&q[i]<='9')) continue; a[k][j++]=q[i]; if(!(q[i+1]>='0'&&q[i+1]<='9')) { a[k][j]=0; j=0; k++; continue; } } printf("%d\n",k); for(i=0;i<k;i++) { printf("%s ",a[i]); } printf("\n"); return 0; }
C++解答
#include <stdio.h> int main() { int i, current, count, vals[500]; char ch, lastch; count = 0; /* 使用current变量标志当前是否有没有处理完毕的整数 -1表示没有,否则表示当前整数已处理的值 */ current = -1; while ((ch = getchar()) != '\n') { if ('0' <= ch && ch <= '9') { if (current == -1) { current = ch - '0'; } else { current = current * 10 + (ch - '0'); } } else { if (current != -1) { vals[count] = current; count++; current = -1; } } } /* 不要忘记在读取完整个字符串之后判断一下是否还有 未处理完毕的整数 */ if (current != -1) { vals[count] = current; count++; current = -1; } printf("%d\n", count); for (i = 0;i < count;i++) printf("%d ", vals[i]); printf("\n"); return 0; }