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; }
相关文章推荐
- 16、正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b, 需要计算出Q中的前几项
- JavaScript基础 parseInt() 于字符串从左往右提取整数
- 【c++习题】【17/4/16】动态分配内存
- 提取不重复的整数
- 将任意的十进制整数转换成任意R进制数(R在2-16之间)
- Day 16: Goose Extractor —— 好用的文章提取工具
- 华为 提取不重复的整数
- 求一个整数n对16求商和余数
- offer - 16 - 数值的整数次方
- 算法导论第四章习题:找出所缺的整数,VLSI芯片测试
- 17:不重复整数提取NoRepeatNum
- 提取不重复的整数
- 提取不重复的整数
- 【C#】 简单计算器设计 & 字符提取和整数整除练习
- 提取不重复的整数(桶排序思想)
- 信用卡必须是 13-16 位的整数串,它必须通过 Luhn 算法来验证通过才是合法的卡号。 Luhn 算法校验的过程是: • 从卡号最后一位数字开始,逆向将奇数位(1、3、5 等)相加。 • 从卡
- 【剑指offer】面试题16:数值的整数次方
- 提取不重复的整数
- 1054 习题4-9-2 求正整数各位上的数字
- 将整数转换为相应的一个字符数组。 分析:从个位提取数字,组合字符 符号位的处理 12345=>"12345"