求两句子的解释
输入一字符串,内有数字和非数字,如:a1234x456-\a124dkk 将其中连续的数字作作为一个整数,依次放到一数组a,如将功赎罪1234,456,124分别放到a[0],a[1],a[2]中,统计有多少个新的整数并输出。
(很郁闷,那个减去48到底是什么意思?)
#include <stdio.h>
main()
{
char str[50],*pstr;
int i,j,m,e10,digit,ndigit,a[10],*pa;
printf("\nInput a string :\n");
gets(str);
printf("\n");
pstr=str;
pa=a;
ngigit=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; /*将个数位赋予 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++; /*位数自加*/
}
*pa=digit; /*将数值赋予数组a*/
ndigit++;
pa++; /*指针指向数组下一元素*/
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++;
}
*pa=digit; /*将数值赋予数组a*/
ngigit++; /*指针指向数组下一元素*/
j=0;
}
printf("There are %d numbers in this line.They are :\n",ndigit);
j=0;
pa=a;
for(j=0;j<ndigit;j++)
printf("%d",*(pa+j));
printf("\n");
}