运行结果是0 想知道哪里错了

编写函数int parse(char *str, int *num),用户输入的字符串中包含有若干个数字,要求通过该函数将数字提取出来,并返回数字个数。
Sample Input 1
Abc12dE23 e45i789
Sample Output 1
Total 4 numbers:
12 23 45 789


//编写函数int parse(char *str, int *num),用户输入的字符串中包含有若干个数字,要求通过该函数将数字提取出来,并返回数字个数。
#include<stdio.h>
int parse(char *str,int *num){
    int k=0,n=0;
    for(int i=0;str[i]!='\0';i++){
        if(str[i]>=0&&str[i]<=9){
            for( ; ;i++){
            if(str[i]>=0&&str[i]<=9){
                    num[k]=str[i];
                    k++;
                }
            else{
            num[k]=' ';
            k++;
            break;
        }
        n++;
    }
}
}
    return n;
}

int main(){
    char str[99];
    int num[99];
    int c;
    gets(str);
    c=parse(str,num);
    printf("Total %d numbers",c);
    for(int i=0;i<c ;i++)
    printf("%d",num[i]);
    return 0;
}

谢谢大家!

这样?

img

#include <stdio.h>
#include <string.h>
int parse(char s[],char n[])
{
    int j,k,i,h=0,len=strlen(s);
    for( j=0; j<len ; j++)
    {
        //n[j]=' ';
        if(s[j]<='9'&&s[j]>='0')
        {
            n[h]=s[j];h++;
        }
        else
        {
            n[h]=' ';h++;
        }
    }
    n[h]='\0';
    
    int count=0;
    if(s[len-1]<='9'&&s[len-1]>='0')
    {
        count=1;
    }
    for(k=0;k<len;k++)
    {
        if(n[k]<='9'&&n[k]>='0'&&n[k+1]==' ')
        {
            count++;
        }     
    }
    printf("Total %d numbers:\n",count);
    int flg=1;
    while(flg)
    {
        flg=0;
        for(k=0;k<len-1;k++)
        {
            if(n[k]==' '&&n[k+1]==' ')
            {
                for(i=k;i<len;i++)
                {
                    n[i]=n[i+1];
                }
                flg=1;
            }
        }
    }/**/
    if(n[0]==' ')
    {
        for(i=0;i<len;i++)
        {
            n[i]=n[i+1];
        }
    }
    puts(n);
}
int main()
{
    char s[250],n[250];
    gets(s);
    parse(s,n);
    return 0;
}

img


改成

if(str[i]>='0'&&str[i]<='9'){
            for( ; ;i++){
            if(str[i]>='0'&&str[i]<='9')
//编写函数int parse(char *str, int *num),用户输入的字符串中包含有若干个数字,要求通过该函数将数字提取出来,并返回数字个数。
#include <stdio.h>
#include <ctype.h>

#define N 100

int parse(char *str, int *num)
{
    int count = 0;
    while (*str)
    {
        if (isdigit(*str))
        {
            int n = 0;
            do
            {
                n = n * 10 + *str - '0';
                str++;
            } while (isdigit(*str));
            *num++ = n;
            count++;
        }
        else
        {
            str++;
        }
    }
    return count;
}

int main()
{
    char str[N];
    int num[N];
    int c;
    fgets(str, N, stdin);
    c = parse(str, num);
    printf("Total %d numbers\n", c);
    for (int i = 0; i < c; i++)
        printf("%d ", num[i]);
    printf("\n");
    return 0;
}
$ gcc -Wall main.c
$ ./a.out
Abc12dE23 e45i789
Total 4 numbers
12 23 45 789

```

if(str[i]>=0&&str[i]<=9){
改为
if(str[i]>='0'&&str[i]<='9'){

int num[99]改为char num[99]
或者
num[k]=str[i] - '0';

你现在的n记录的是数字总个数,你示例中的n是数字串的个数。