10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。

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

                  a123x456 17960? 302tab5876

将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。

#include <stdio.h>

int main(){
    void search(char * parr, int * pnum);
    char arr[100],* parr;
    int num[30],* pnum;
    parr=arr;
    pnum=num;
    printf("请输入一个包含数字的字符串\n");
    gets(arr);
    //统计字符串中整数的个数(连续数字作为一个整数),并放到一个数组中
    search(parr, pnum);
    return 0;
}

void search(char * parr, int * pnum){
    int i=0,j=0,x=0;
    while( *(parr+i) !='\0' ){
        if(*(parr+i) >= '0' && *(parr+i) <= '9' ) j++;//j表示数字的位数
            else if(j>0){//碰到字母,并且之前的是数字
                int digit,k,m,e10;
                digit = * (parr+i-1)-48;    //个位上的值
                k=1;
                
                while(k<j){  //整数的位数大于1的话
                        e10=1;
                        for(m=1; m<=k; m++){
                            e10=10*e10;
                        }
                        digit += (* (parr+i-1-k)-48)*e10;
                        k++;
                }
                *(pnum+x)=digit;
                x++;
                j=0;
            }
        i++;
    }

        //如果字符串末尾是数字的话,需要在while循环外边判断
        if(j>0){
            int digit,k,m,e10;
            digit = * (parr+i-1)-48;    //个位上的值
            k=1;
            while(k<j){  //整数的位数大于1的话
                        e10=1;
                        for(m=1; m<=k; m++){
                            e10=10*e10;
                        }
                        digit += (* (parr+i-1-k)-48)*e10;
                        k++;
                    }
            *(pnum+x)=digit;
            x++;
        }
        printf("该字符串共有%d个整数,分别为:\n",x);
        for(i=0; i<x; i++){
        printf("%-8d",*(pnum+i));
        }
        printf("\n");
}

结果:

posted @ 2017-08-03 19:31  Allen101  阅读(4275)  评论(0编辑  收藏  举报