#include <stdio.h>
/*************************************************
输入一个字符串,内有数字和非数字字符,例如:
A123x456 17960?302tab5876
将其中连续的数字作为一个整数,依次存放到一数组a中。
例如,123存放在a[0],456存放在a[1]…统计共有多少个整数,并输出这些数。
*************************************************/
void main()
{
char str[50];
char *pstr = str;
int i = 0,j = 0;
int digit, k, m, e10;
int num[20], n_num = 0; //n_num 用来输出计数
int *pa = num;
int *pnum = num;
gets(str);
while((*(pstr+i)) != '\0')
{
if((*(pstr+i)) >= '0' && (*(pstr+i))<='9') //
{
j++; //这个if - else 语句可以将连续的数字统计完成
}
else
{
if(j > 0) // 说明有数字出现
{
digit = *(pstr+i-1) - '0'; //在if语句中,i指向了下一个非数字字符,所以*(pstr+i-1)代表个位数
k = 1; //统计数字
while(k < j) //将两位数及以上的数值累加致digit
{
e10 = 1;
for(m = 1; m <= k; m++)
e10 = e10 * 10;
digit = digit + (*(pstr+i-1-k) - '0')*e10;
k++;
}
*pnum = digit;
n_num++;
pnum++;
j = 0;
}
}
i++;
}
if(j > 0) //以数字结尾的最后一个字符串
{
digit = *(pstr+i-1) - '0'; // 个位数赋值给digit
k = 1;
while(k < j)
{
e10 = 1;
for(m = 1; m <= k; m++)
e10 = e10*10;
digit = digit + (*(pstr + i - 1 -k) - '0') * e10; //将数字累加
k++;
}
*pnum = digit;
n_num++;
pnum++;
j = 0;
}
// 输出
for(j = 0; j < n_num; j++)
printf("%d ", *(pa + j));
}