- 最後登錄
- 2024-10-2
- 在線時間
- 1607 小時
- 註冊時間
- 2010-8-8
- 閱讀權限
- 30
- 精華
- 0
- UID
- 8564223
- 帖子
- 479
- 積分
- 1757 點
- 潛水值
- 33552 米
| 分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。 本帖最後由 tony01111299 於 2011-3-31 01:19 AM 編輯
提供另一種版本:- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #define P printf
- #define forever for(;;)
- void keep_digit(char*s)
- {
- while(*s){
- if(!isdigit(*s))
- *s=' '; // 不是 '0'~'9' 的全部轉成空白
- s++;
- }
- }
- int main()
- {
- int sum=0,temp=0;
- char s[100]={0};
- char output[10000]={0};
- char*p,*q;
- while(fgets(s,sizeof(s),stdin)){
- strcpy(output+strlen(output),s); // 將輸入字串 s 複製並接於 output 尾端
- keep_digit(s); // 將字串中數字保留
- p=s; // 將 p 指向 s 字串
- forever{
- temp=strtol(p,&q,10); // 抓取字串 p 中 10 進位數字,並將 q 指向該數字完結的後一個位置
- if(p==q) // 字串中沒數字時 q 會指向 p,故可以此判斷
- break;
- sum+=temp;
- p=q; // 將 p 移至 q
- }
- }
- P("%s",output);
- P("Ans=%d",sum);
- getchar();
- }
複製代碼 舉例與解說:- char s[7]=" 30 2 ";
- char*p,*q;
- p=s;
- 此時呈現以下關係:
- s[0] ' ' <- p // 將 p 指向 &s[0]
- s[1] '3'
- s[2] '0'
- s[3] ' '
- s[4] '2'
- s[5] ' '
- s[6] '\0'
- strtol(p,&q,10) 後,strtol 會回傳 p 指向字串(" 30 2 ")中第一個找到的 10 進位數字即 30,並將 q 指向該數字完結的後一個位置,此時呈現以下關係:
- s[0] ' ' <- p // 將 p 指向 &s[0]
- s[1] '3'
- s[2] '0'
- s[3] ' ' <- q // 將 q 指向 &s[3]
- s[4] '2'
- s[5] ' '
- s[6] '\0'
- 此時 p!=q,故不會觸發 break 跳出迴圈,往下執行 p=q;,此時呈現以下關係:
- s[0] ' '
- s[1] '3'
- s[2] '0'
- s[3] ' ' <- q <- p // 將 p 指向 q,即 &s[3]
- s[4] '2'
- s[5] ' '
- s[6] '\0'
- 第二次迴圈,strtol(p,&q,10) 會回傳 p 指向字串(" 2 ")中第一個找到的 10 進位數字即 2,並將 q 指向該數字完結的後一個位置,此時呈現以下關係:
- s[0] ' '
- s[1] '3'
- s[2] '0'
- s[3] ' ' <- p
- s[4] '2'
- s[5] ' ' <- q // 將 q 指向 &s[5]
- s[6] '\0'
- 此時 p!=q,故不會觸發 break 跳出迴圈,往下執行 p=q;,此時呈現以下關係:
- s[0] ' '
- s[1] '3'
- s[2] '0'
- s[3] ' '
- s[4] '2'
- s[5] ' ' <- q <- p // 將 p 指向 q,即 &s[5]
- s[6] '\0'
- 第三次迴圈,strtol(p,&q,10) 會回傳 p 指向字串(" ")中第一個找到的 10 進位數字,但因為該字串內已找不到任何 10 進位數字,故將 q 指向 p,此時呈現以下關係:
- s[0] ' '
- s[1] '3'
- s[2] '0'
- s[3] ' '
- s[4] '2'
- s[5] ' ' <- p <- q // 將 q 指向 p,即 &s[5]
- s[6] '\0'
- 此時 p==q,觸發 break 跳出迴圈。
複製代碼 ...
|
|