输入一串字符,查找其中有多少个整数,并输出这些整数。(个数位怎么求?)

Hayden_yang 2009-03-28 11:54:58
//题目:输入一串字符,查找其中有多少个整数,并输出这些整数。
//我的问题在注释里边。(求个数位那,看不懂)

#include<iostream>
using namespace std;
int main()
{char str[50],*pstr;
int i,j,k,m,e10,digit,ndigit,a[10],*pa;
cout<<"input a string:"<<endl;
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 (这里为什么要-48?)
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; //将数值放入数组
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;
ndigit++;
j=0;
}
printf("There are %d numbers in this line. They are:\n",ndigit);
j=0;
pa=&a[0];
for(j=0;j<ndigit;j++)
cout<<*(pa+j)<<endl;
cout<<endl;
return 0;
}
...全文
427 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hayden_yang 2009-04-03
  • 打赏
  • 举报
回复
晕,这个问题给忘了。。
deerwin1986 2009-03-28
  • 打赏
  • 举报
回复
类似编译器前端词法分析器设计...
逐字符的取 遇字母就是字符串 遇数字就是整数...
直接用SCANF...
crond123 2009-03-28
  • 打赏
  • 举报
回复
首先分词 然后判断每个单词是不是数字

推荐使用lex
Cpp权哥 2009-03-28
  • 打赏
  • 举报
回复
-48是字符到数值的转换.字符是用编码来表示的,''0'的编码是48.
比如
'8' - '0'
应该得到差值8,这个正好是字符'8'对应的数值.一般在写的时候都不写成-'0',直接写成-48了.
mengde007 2009-03-28
  • 打赏
  • 举报
回复
ASCII码
worinima9999 2009-03-28
  • 打赏
  • 举报
回复
帅哥,你莫非没有看过ascii码么,char 0对应的ascii码就是48啊,要想把char变成int就直接用ascii码来做
la_feng 2009-03-28
  • 打赏
  • 举报
回复
程序里是按字符处理的,因为‘0’的编码是48,一个数字字符-48后就是对应的十进制数了

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧