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");
}

結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM