输入一个字符串,内有数字和非数字字符,例如:A123cdf 456.78cpc876.9er 840,
将其中连续的数字作为一个整数,依次存放到一数组a中。例如123存放在a[0],依次类推,统计共有多少个数,并输出这些数。
#include "stdio.h"
#define N 50
int atoi(char *p,int a)
{
int number,n;
while(*p!='\0')
{
for(;(*p>='0'&&*p<='9');p++)
number=0;
for(number=0;(*p>='0'&&p<='9');p++)
number=number10+*p-'0';
a[p++]=number;
}
return n;
}
int main(void)
{
char s[N];
int i,k,a[N];
printf("Input a string:\n");
gets(s);
k=atoi(s,a);
printf("\nk= %d\n",k);
for(i=0;i<k-1;i++)
printf("%d ",a[i]);
return 0;
}
虽然可以运行,但是答案错误,希望大家能帮帮我
统计个数的 n初始化为0 每有一个数字n++没写
我把大部分改写了,代码如下,仅供参考,谢谢!
//输入一个字符串,内有数字和非数字字符,
//例如:A123cdf 456.78cpc876.9er 840,
//将其中连续的数字作为一个整数,依次存放到一数组a中。例如123存放在a[0],依次类推,统计共有多少个数,并输出这些数。
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define N 50
int myatoi(char *p,int *a)
{
int n=0;
//个数统计
int i=0,j=0;
//数组索引位置
char num[N][N];
while(*p!='\0')
{
if(*p>='0'&& *p<='9')
{
num[i][j++]=*p;
if(!isdigit(*(p+1)))
{
num[i][j++]='\0';
i++;
j=0;
n++;
}
}
p++;
}
for(int k=0,z=0;k<n;k++,z++)
{
//printf("%s\n",num[k]);
*(a+z)=atoi(num[k]);
}
return n;
}
int main(void)
{
char s[N];
int i,k,a[N];
printf("Input a string:\n");
fgets(s,N,stdin);
k=myatoi(s,a);
printf("\nk= %d\n",k);
//输出目标数据
for(i=0;i<k;i++)
printf("%d ",a[i]);
return 0;
}