C语言:输入一个字符串,统计有多少个整数并输出

#include <stdio.h>
void main()
{
char str[50],*pstr;
int i,j,k,m,e10,digit,ndigit,a[10],*pa;
printf("input a string:\n");
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("There are %d numbers in this line.They are:\n",ndigit);
j=0;
pa=&a[0];
for(j=0;j<=ndigit;j++)
printf("%d ",*(pa+j));
printf("\n");
}

21行的48是怎么来的啊

48多次出现在程序中,原理是这样的

字符'0'的ascii码是十六进制的30H,也就是十进制的48

所以如果某个字符是'0'.....'9'的话那么它在计算机里存储的是它的ascii码30H-39H,也就是十进制的48-57,在统计的时候用某个字符的ascii码值减去48就等到了这个字符对应的数值。

digit=*(pstr+i-1)-48; 比如这一句中的*(pstr+i-1) 如果是49的话,就代表它是字符'1' 减去48恰好得到1,也就是得到了字符'1'所对应的数值1
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-04
48即是0x30,ASCII码中我们看到的0到9的对应的是0x30-0x39.
第2个回答  2013-08-04
在ASCII表中这个表示将字符'8'转换为对应的数值:8。
相似回答