您的位置:首页 > 其它

XYNU OJ 1120: 习题8-16 整数提取

2017-08-01 15:33 134 查看


1120: 习题8-16 整数提取

时间限制: 1 Sec  内存限制: 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


提示

学会将一个数字字符序列(数字字符串)转换成一个整数

如"456"-->456

可按十进制数制进行转换
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]; /*字符指针pstr置于数组str 首地址*/
pa=&a[0]; /*指针pa置于a数组首地址*/
ndigit=0; /*ndigit代表有多少个整数*/
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; /*将个数位赋予digit*/
k=1;
while (k<j) /*将含有两位以上数的其它位的数值累计于digit*/
{
e10=1;
for (m=1;m<=k;m++)
e10=e10*10; /*e10代表该位数所应乘的因子*/
digit=digit+(*(pstr+i-1-k)-48)*e10; /*将该位数的数值\累加于digit*/
k++; /*位数K自增*/
}
*pa=digit; /*将数值赋予数组a*/
ndigit++;
pa++; /*指针pa指向a数组下一元素*/
j=0;
}
}
i++;
}
if (j>0) /*以数字结尾字符串的最后一个数据*/
{
digit=*(pstr+i-1)-48; /*将个数位赋予digit*/
k=1;
while (k<j) /* 将含有两位以上数的其它位的数值累加于digit*/
{
e10=1;
for (m=1;m<=k;m++)
e10=e10*10; /*e10代表位数所应乘的因子*/
digit=digit+(*(pstr+i-1-k)-48)*e10; /*将该位数的数值累加于digit*/
k++; /*位数K自增*/
}
*pa=digit; /*将数值赋予数组a*/
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;
}

C++代码:

#include <iostream>
using namespace std;
int main()
{char str[50],*pstr;
int i,j,k,m,e10,digit,ndigit,a[10],*pa;

gets(str);
cout<<endl;
pstr=&str[0];    //字符指针pstr指向数组str首元素
pa=&a[0];        //指针pa指向a数组首元素
ndigit=0;        //ndigit代表有多少个整数
i=0;             //i代表字符串中的第几个字符/
j=0;             //j代表连续数字的位数
while(*(pstr+i)!='\0')
{if((*(pstr+i)>='0') && (*(pstr+i)<='9'))
j++;
else
{if (j>0)
{digit=*(pstr+i-1)-48;          //将个数位赋予digit
k=1;
while (k<j)     //将含有两位以上数的其它位的数值累计于digit
{e10=1;
for (m=1;m<=k;m++)
e10=e10*10;                  //e10代表该位数所应乘的因子
digit=digit+(*(pstr+i-1-k)-48)*e10;  //将该位数的数值累加于digit
k++;                         //位数k自增
}
*pa=digit;                     //将数值放在数组a中
ndigit++;
pa++;                         //指针pa指向a数组下一元素
j=0;
}
}
i++;
}
if (j>0)                         //以数字结尾字符串的最后一个数据
{digit=*(pstr+i-1)-48;          //将个数位赋予digit
k=1;
while (k<j)          // 将含有两位以上数的其它位的数值累加于digit
{e10=1;
for (m=1;m<=k;m++)
e10=e10*10;            //e10代表位数所应乘的因子
digit=digit+(*(pstr+i-1-k)-48)*e10;  //将该位数的数值累加于digit
k++;  /*位数K自增*/
}
*pa=digit;                 //将数值放到数组a中
ndigit++;
j=0;
}
printf("%d\n",ndigit);
j=0;
pa=&a[0];
for (j=0;j<ndigit;j++)            //打印数据
cout<<*(pa+j)<<endl;
cout<<endl;
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: