输入一个字符串,内有数字和非数字字符,例如
A123x456 1789?302TAB5876
将其中连续的数字作为一个整数,依次存放到一数组a中,如123放在a[0],456放在a[1]中;
#include<stdio.h>
int main()
{
int i,j,k,digit,ndigit,e10,m,a[10],*pa;
char str[50],*pstr;
printf("please input string:/n");
gets(str);
pa=&a[0];
pstr=&str[0];
ndigit=0;
i=0;
j=0;
while(*(pstr+i)!='/0')
{ //忘记写=等于号了,应该是">="
if((*(pstr+i)>='0')&&(*(pstr+i)<='9'))//刚开始以为要用while;其实用if效果一样;注意相与的时候要加括号
j++;
else//注意else作用域是下面这个花括号;不包括i++;
{
if(j>0)
{ //将个位数赋予digit;
digit=*(pstr+i-1)-48;//0~9的ascii码是30h~39h;减去48将它变为十进制;
k=1;//k个位数
while(k<j)
{
e10=1;//该位数所应乘的因子;
for(m=1;m<=k;m++)//k如果大于2;计算e10的因子;
e10=e10*10;
digit=digit+(*(pstr+i-1-k)-48)*e10;//将十位百位数的数字乘以e10;
k++;//数位k自增;
}
*pa=digit;//将数值赋予数组a;
ndigit++;
pa++;//指针pa指向a数组下一元素;
j=0;//一个数结束;初始j=0;
}
}
i++;
}
printf("this string total have %d digit/n",ndigit);
pa=&a[0];//如果没有重新赋值pa指向a首地址;输出值就不正确;因为pa值变化了,所以需要重新赋值;
for(j=0;j<ndigit;j++)//总共有ndigit个数字个数;所以j<ndigit;
printf("%8d",*(pa+j));//如果%4d因为不够宽,输出的两个数字连在一起了;
printf("/n");
return 0;
}