3469 - 习题8-16 整数提取
输入一个字符串,内含数字和非数字字符,如:
A123x456.17960?302t ab5876
将其中连续的数字作为一个整数,依次存放在一个整型数组中(假设数组名为a)。如上例所示,将123放在a[0]中,456放在a[1]中,17960放在a[2]中,........,同时统计整数的个数并输出相关的信息。
Input
一行字符串(以回车结束),可含空格
Output
输出数据分多行,每行一个数据。其中第一行是字符串中包含的整数个数,从第二行开始依次输出各个整数。
Examples
Input
A123x456.17960?302t ab5876
Output
5 123 456 17960 302 5876
Hint
学会将一个数字字符序列(数字字符串)转换成一个整数
如"456"-->456
可按十进制数制进行转换
Solution 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; }
Hint
学会将一个数字字符序列(数字字符串)转换成一个整数
如"456"-->456
可按十进制数制进行转换