3469 - 习题8-16 整数提取

通过次数

0

提交次数

0

时间限制 : 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; 
}