找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
尊貴會員無限看帖不用回覆搞笑、娛樂、精彩的影片讓你看安全提問(回答) 和 永久尊貴會員 事宜
七龍珠我的英雄偷拍cosplay柯南按摩photosho
世人為我soan 019壹柒柒177神桜姫~アゾッmlb

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]新人大叔冒險者,

[簡]異世界失格12- (

遵義醫學院 病人及家

[繁]我要【招架】一切

[繁]新人大叔冒險者,

(10月新番)[繁]魔王陛
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 12414|回復: 12
打印上一主題下一主題

[問題]從字串裡如何抓數字???(已解決)[複製鏈接]

Rank: 2Rank: 2

帖子
184
積分
606 點
潛水值
10574 米
跳轉到指定樓層
樓主
發表於 2011-3-27 09:51 AM|只看該作者|正序瀏覽
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。
本帖最後由 p12332145600 於 2011-3-28 07:41 AM 編輯

從字串裡如何抓數字

範例輸入:
Cyut54is a356good 72school
Ne125ver 56give22 66up

範例輸出:
Cyut54is a356good 72school
Ne125ver 56give22 66up
Ans=751

計算方法:54+356+72+125+56+22+66=751

請大大可以幫忙一下!!
分享分享0收藏收藏1支持支持0

使用道具檢舉

toootoootw 該用戶已被刪除
13
發表於 2011-4-6 12:56 AM|只看該作者
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。
抱歉 
我是個小小新手

想請問各位大大一個基礎的問題

為什麼我看到大部分的人 輸出輸入都是使用stdio.h
很少人使用iostream
為什麼呢?

C++不是新創iostream?
應該有它的優點吧?
(小弟個人覺得iostream比較好用)

能有大大為我講解嗎

感謝
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

Rank: 4Rank: 4Rank: 4Rank: 4

帖子
1927
積分
4007 點
潛水值
96633 米
12
發表於 2011-4-4 09:09 PM|只看該作者
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

Rank: 2Rank: 2

帖子
184
積分
606 點
潛水值
10574 米
11
發表於 2011-4-1 07:51 AM|只看該作者
回復
下載: 訪客無法瀏覽下載點,請先 註冊登入會員
tony01111299


感謝大大可以提供另一種解法!!
還加上解說(感恩!!)

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
479
積分
1757 點
潛水值
33552 米
10
發表於 2011-3-31 12:56 AM|只看該作者
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
本帖最後由 tony01111299 於 2011-3-31 01:19 AM 編輯

提供另一種版本:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #define P printf
  6. #define forever for(;;)
  7. void keep_digit(char*s)
  8. {
  9.      while(*s){
  10.           if(!isdigit(*s))
  11.                *s=' '; // 不是 '0'~'9' 的全部轉成空白
  12.           s++;
  13.           }
  14. }
  15. int main()
  16. {
  17.      int sum=0,temp=0;
  18.      char s[100]={0};
  19.      char output[10000]={0};
  20.      char*p,*q;
  21.      while(fgets(s,sizeof(s),stdin)){
  22.           strcpy(output+strlen(output),s); // 將輸入字串 s 複製並接於 output 尾端
  23.           keep_digit(s); // 將字串中數字保留
  24.           p=s; // 將 p 指向 s 字串
  25.           forever{
  26.                temp=strtol(p,&q,10); // 抓取字串 p 中 10 進位數字,並將 q 指向該數字完結的後一個位置
  27.                if(p==q) // 字串中沒數字時 q 會指向 p,故可以此判斷
  28.                     break;
  29.                sum+=temp;
  30.                p=q; // 將 p 移至 q
  31.                }
  32.           }
  33.      P("%s",output);
  34.      P("Ans=%d",sum);
  35.      getchar();
  36. }
複製代碼
舉例與解說:
  1. char s[7]=" 30 2 ";
  2. char*p,*q;
  3. p=s;

  4. 此時呈現以下關係:

  5. s[0]  ' '  <- p // 將 p 指向 &s[0]
  6. s[1]  '3'
  7. s[2]  '0'
  8. s[3]  ' '
  9. s[4]  '2'
  10. s[5]  ' '
  11. s[6]  '\0'

  12. strtol(p,&q,10) 後,strtol 會回傳 p 指向字串(" 30 2 ")中第一個找到的 10 進位數字即 30,並將 q 指向該數字完結的後一個位置,此時呈現以下關係:

  13. s[0]  ' '  <- p // 將 p 指向 &s[0]
  14. s[1]  '3'
  15. s[2]  '0'
  16. s[3]  ' '  <- q // 將 q 指向 &s[3]
  17. s[4]  '2'
  18. s[5]  ' '
  19. s[6]  '\0'

  20. 此時 p!=q,故不會觸發 break 跳出迴圈,往下執行 p=q;,此時呈現以下關係:

  21. s[0]  ' '
  22. s[1]  '3'
  23. s[2]  '0'
  24. s[3]  ' '  <- q <- p // 將 p 指向 q,即 &s[3]
  25. s[4]  '2'
  26. s[5]  ' '
  27. s[6]  '\0'

  28. 第二次迴圈,strtol(p,&q,10) 會回傳 p 指向字串(" 2 ")中第一個找到的 10 進位數字即 2,並將 q 指向該數字完結的後一個位置,此時呈現以下關係:

  29. s[0]  ' '
  30. s[1]  '3'
  31. s[2]  '0'
  32. s[3]  ' '  <- p
  33. s[4]  '2'
  34. s[5]  ' '  <- q // 將 q 指向 &s[5]
  35. s[6]  '\0'

  36. 此時 p!=q,故不會觸發 break 跳出迴圈,往下執行 p=q;,此時呈現以下關係:

  37. s[0]  ' '
  38. s[1]  '3'
  39. s[2]  '0'
  40. s[3]  ' '
  41. s[4]  '2'
  42. s[5]  ' '  <- q <- p // 將 p 指向 q,即 &s[5]
  43. s[6]  '\0'

  44. 第三次迴圈,strtol(p,&q,10) 會回傳 p 指向字串(" ")中第一個找到的 10 進位數字,但因為該字串內已找不到任何 10 進位數字,故將 q 指向 p,此時呈現以下關係:

  45. s[0]  ' '
  46. s[1]  '3'
  47. s[2]  '0'
  48. s[3]  ' '
  49. s[4]  '2'
  50. s[5]  ' '  <- p <- q // 將 q 指向 p,即 &s[5]
  51. s[6]  '\0'

  52. 此時 p==q,觸發 break 跳出迴圈。
複製代碼
...
瀏覽完整內容,請先 註冊登入會員





如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 2Rank: 2

帖子
184
積分
606 點
潛水值
10574 米
9
發表於 2011-3-30 08:24 PM|只看該作者
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。
回復
下載: 訪客無法瀏覽下載點,請先 註冊登入會員
k85218693

謝謝大大讓我學到新的語法
我一定會加油的!!
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 2Rank: 2

帖子
219
積分
760 點
潛水值
9464 米
8
發表於 2011-3-30 08:09 PM|只看該作者
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。
回復
下載: 訪客無法瀏覽下載點,請先 註冊登入會員
p12332145600

ungetc(c, fptr);
是把變數c裝的字元,還回fptr的檔案內。
簡單的說,就是倒退一格。
還有,程檢加油

使用道具檢舉

Rank: 2Rank: 2

帖子
184
積分
606 點
潛水值
10574 米
7
發表於 2011-3-27 05:10 PM|只看該作者
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。
回復
下載: 訪客無法瀏覽下載點,請先 註冊登入會員
ponchi96


謝謝大大幫我解答!!!!  感恩  ^^

使用道具檢舉

Rank: 1

帖子
105
積分
196 點
潛水值
7917 米
6
發表於 2011-3-27 04:16 PM|只看該作者
回復
下載: 訪客無法瀏覽下載點,請先 註冊登入會員
p12332145600
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<math.h>  
  4. #define p printf
  5. #define fo fopen
  6. #define MAX 100

  7. int num=0,y=0;
  8. void a(int x)
  9. {
  10.    if(x!=-1)   //y用來判別陣列內的數 是 X*10^0,X*10^1,X*10^2 ...
  11.       num=num+(x*pow(10,y)),y++;
  12.    else
  13.       y=0;  
  14. }  
  15. int main()
  16. {
  17.    int number[MAX],i;
  18.    char number2[MAX];
  19.    FILE *numberload=fo("input.txt","rt");
  20.    if(numberload == NULL)exit(1);
  21.    for(i=0;i<MAX;i++){  
  22.         fscanf(numberload,"%c",&number2[i]);
  23.         if(number2[i]==NULL)break;
  24.         if(number2[i]>47&&number2[i]<58) //用ASCII碼判別為數字放進number2
  25.            number[i]=number2[i]-'0';
  26.         else
  27.            number[i]=-1;                 //若不是則放-1
  28.         p("%c",number2[i]);      
  29.    }     
  30.    fclose(numberload);
  31.    for(int j=i-1;j>=0;j--)//執行number2陣列計算總和
  32.      a(number[j]);
  33.    p("\nAns=%d\n",num);  
  34.    system("pause");
  35.    return 0;                  
  36. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php

使用道具檢舉

Rank: 2Rank: 2

帖子
184
積分
606 點
潛水值
10574 米
5
發表於 2011-3-27 01:47 PM|只看該作者
ungetc(c, fptr); 這個指令不太清楚在做什麼
不過我知道這個指令  getc(fptr);    是從檔案讀取一個字元




若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

Rank: 2Rank: 2

帖子
219
積分
760 點
潛水值
9464 米
4
發表於 2011-3-27 01:02 PM|只看該作者
下面應該是你需要的程式碼。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #define fo fopen
  5. #define pr printf

  6. int main(void)
  7. {
  8.     FILE *fptr = fo("input.txt", "r");
  9.     int sum = 0, c, n;
  10.    
  11.     if(fptr != NULL)
  12.     {
  13.         do
  14.         {
  15.             c = getc(fptr);
  16.             
  17.             if(isdigit(c))
  18.             {
  19.                 ungetc(c, fptr);
  20.                 fscanf(fptr, "%d", &n);
  21.                 pr("%d", n);
  22.                 sum += n;
  23.             }
  24.             else
  25.             {
  26.                 pr("%c", c);
  27.             }
  28.         } while(!feof(fptr));
  29.         pr("\n");
  30.         pr("Ans=%d\n", sum);
  31.     }
  32.     else
  33.     {
  34.         pr("找不到檔案!\n");
  35.         exit(1);
  36.     }
  37.     fclose(fptr);
  38.     system("pause");
  39.     return 0;
  40. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 2Rank: 2

帖子
184
積分
606 點
潛水值
10574 米
3
發表於 2011-3-27 11:29 AM|只看該作者
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
其實我的程度不是那麼好所以看不太懂那段副程式
不過我還是很感謝大大可以幫我解答  ^^
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

Rank: 2Rank: 2

帖子
643
積分
967 點
潛水值
10169 米
頭香
發表於 2011-3-27 11:04 AM|只看該作者
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。
  1. /// GetSumFromString Example
  2. #include <stdio.h>
  3. #define P printf /// for eyny only

  4. int getSumFromString(const char *str)
  5. {
  6.         if (!str) return 0; /// Return value to be discussed depends on application.

  7.         int sum = 0;
  8.         int num = 0;
  9.         while(*(str++) != '\0')
  10.         {
  11.                 if(*str < '0' || *str > '9')
  12.                 {
  13.                         if(num > 0)
  14.                         {                 
  15.                                 sum += num;
  16.                                 ///P("sum + num (%d) = %d\n", num, sum);
  17.                                 num = 0;
  18.                         }        
  19.                         continue;
  20.                 }
  21.                
  22.                 num = num*10 + (*str - '0');        
  23.         }

  24.         return sum;
  25. }

  26. int main(int argc , char **argv)
  27. {

  28.         int x = 0;
  29.         
  30.         x  = getSumFromString("Cyut54is a356good 72school");
  31.         x += getSumFromString("Ne125ver 56give22 66up");
  32.         
  33.         P("ANS= %d\n", x);
  34. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
短信請留E-Mail or goto my space :)
http://blog.eyny.com/space.php?uid=8893386

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部