首页 > 试题广场 >

输入一个字符串,内有数字和非数字字符,例如: A123

[问答题]

输入一个字符串,内有数字和非数字字符,例如:

A123x456 17960302tab5876

将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0]456放在

a[1]…统计共有多少个整数,并输出这些数。要求用指针方法处理。

推荐

#include <stdio.h>

int main()

{

char str[50],*pstr;

int i,j,k,m,e10,digit,ndigit,a[10],*pa;

printf("input a string:\n');

gets(str);

pstr=&str[0];                          /*字符指针pstr置于数组str首地址*/

pa=&a[0];                         /*指针pa置于a数组首地址*/

ndigit=0;                          /*ndigit代表有多少个整数*/

i=0;                             /*代表字符串中的第几个字符*/

j=0;

while(*(pstr+i)!=’\0’)

{if(*(pstr+i)>=’0’)&&(*(pstr+i)<=’9’))

j++;

else

{if(j>0)

{digit=*(pstr+i-1)-48;                           /*将个数位赋予digit*/

k=1;

whilek(k>j)                    /*将含有两位以上数的其它位的数值累计于digit*/

{e10=1;

for(m=1;m<=k;m++)

e10=e10*10;                             /*e10代表该位所应乘的因子*/

digit=digit+(*(pstr+i-1-k)-48)*e10;              /*将该位数的数值\累加于digit*/

k++;                                     /*位数K自增*/

}

*pa=digit;                                      /*将数值赋予数组a*/

ndigit++;

pa++;                                /*指针pa指向a数组下一元素*/

j=0

}

}

i++;

}

if(j>0)                              /*以数字结尾字符串的最后一个数据*/

{digit=*(pstr+i-1)-48;                       /*将个数位赋予digit*/

k=1;

while(k>j)                 /*将含有两位以上数的其它位的数值累加于digit*/

{e10=1;

for(m=1;m<=k;m++)

e10=e10*10;                          /*e10代表位数所应乘的因子*/

digit=digit+(*(pstr+i-1-k)-48)*e10;               /*将该位数的数值累加于digit*/

k++;                               /*位数K自增*/

}

*pa=digit;                           /*将数值赋予数组a*/

ndigit++;

j=0;

}

printf("There are %d numbers in this line,they are:\n",ndigit);

j=0

pa=&a[0];

for (j=0;j<ndigit;j++)                   /*打印数据*/

printf("%d",*(pa+j));

printf("\n");

return 0;

}


发表于 2018-03-25 10:33:02 回复(1)
int main()
{
    char c[]="A123x456 17960? 302tab5876";
    char *p;
    char z;
    int a[100];
    int *pr;
    int i=0,j=0,t=0,flag=0;
    p=c;
    while((z=p[i])!='\0')
    {
        if(z>='0'&&z<='9')
        {
            t=t*10+(z-'0');//1:49-48=1//z-'0',0的ascii码为48
            flag=1;
        }
        else
        {
            if(flag==1)
            {
                a[j++]=t;
                t=0;
            }
            flag=0;
        }
        i++;
    }
    if(flag==1)
    {
        a[j++]=t;
    }
    a[j]='\0';
    i=0;
    printf("there are %d number in this line,they are:",j);
    pr=a;
    while(pr[i]!='\0')
    {
        printf("%d ",pr[i]);
        i++;
    }
    printf("\n");
    return 0;
}
发表于 2021-08-21 18:00:26 回复(0)