3469 - 习题8-16 整数提取
时间限制 : 1 秒
内存限制 : 12 MB
输入一个字符串,内含数字和非数字字符,如:
A123x456.17960?302t ab5876
将其中连续的数字作为一个整数,依次存放在一个整型数组中(假设数组名为a)。如上例所示,将123放在a[0]中,456放在a[1]中,17960放在a[2]中,........,同时统计整数的个数并输出相关的信息。
题目输入
一行字符串(以回车结束),可含空格
题目输出
输出数据分多行,每行一个数据。其中第一行是字符串中包含的整数个数,从第二行开始依次输出各个整数。
输入/输出样例
输入格式
A123x456.17960?302t ab5876
输出格式
5 123 456 17960 302 5876
C语言解答
#include<stdio.h> int main() { char str[50],*pstr; int i,j,k,m,e10,digit,ndigit,a[10],*pa; gets(str); pstr=&str[0]; pa=&a[0]; ndigit=0; i=0; j=0; while(*(pstr+i)!='\0') {if((*(pstr+i)>='0') && (*(pstr+i)<='9')) j++; else {if (j>0) {digit=*(pstr+i-1)-48; k=1; while (k<j) {e10=1; for (m=1;m<=k;m++) e10=e10*10; digit=digit+(*(pstr+i-1-k)-48)*e10; k++; } *pa=digit; ndigit++; pa++; j=0; } } i++; } if (j>0) {digit=*(pstr+i-1)-48; k=1; while (k<j) {e10=1; for (m=1;m<=k;m++) e10=e10*10; digit=digit+(*(pstr+i-1-k)-48)*e10; k++; } *pa=digit; ndigit++; j=0; } printf("%d\n",ndigit); j=0; pa=&a[0]; for (j=0;j<ndigit;j++) printf("%d\n",*(pa+j)); return 0; }