问题:输入一个字符串,内有数字和非数字字符,例如:
a123x456 17960? 302tab5876
将其中连续的数字作为一个整数,依次存放到一个数组a中。
例如,123放在a[0],456放在a[1],…。共有多少个整数,并输出这些数。
#include <stdio.h>
#include <math.h>
#define N 100 //N为字符串的长度
int main()
{
int record(char *p,int q[]); //声明record函数(记录连续数字,返回值为有效元素个数)
int a[N],i,k; //a[N]为存放连续数字的数组
char s[N];
gets(s);
k=record(s,a); //k为数组a中有效元素个数
printf("共有%d个整数\n分别为:",k);
for(i=0;i<k;i++) printf("%d ",a[i]);
return 0;
}
int record(char *p,int q[])
{
int number(int x[],int m,int n); //声明number函数(返回值就是连续的数字的值)
int i=0,j=0,l,f[N]; //f[N]数组记录字符串中出现的数字
while (*p!='\0')
{
l=i; //l表示数组q的第j个元素的首位数字在数组f中的起始位置
if (*p<'0'||*p>'9') {p++;continue;}
else {while (*p>='0'&&*p<='9')
{f[i]=*p-48;p++;i++;} //用ASCII码值的关系给数组f赋值
q[j]=number(f,i,l); //调用number函数给数组q赋值
j++;
}
}
return j;
}
int number(int x[],int m,int n)
{
int total=0,i; //total为连续的数字的值
for(i=0;n<m;n++)
{total=total+pow(10,i)*x[m-1-i];i++;}
return total;
}
注释语言上有不规范的地方大佬们指出来-0-。