Powered By Blogger

關於我自己

我的相片
網站經營斷斷續續,現在以分享程式練習為主。 因為工作需要,不時會有練習程式的需要。 所以將自己練習的過程分享給大家。 如果有幫助到各位,那就太好了! 如果針對本人或網站內容有任何問題, 歡迎與我聯絡。

2012年5月19日 星期六

【C / C++ 語言】在數字英文字串中將數字相加


居裡貓今天考了C語言程式的考試,在這邊分享一下我的解答方式給大家看看!

在一個 txt 檔案中讀出含有字元('a'~'z','A'~'Z')、數字('0'~'9')以及空白。
將其中的數字部份進行加總,若數字不足四位數者,在後方補 0 ,直到滿足四位數。
輸出內容需將包含 txt 檔案內容集加總結果。

以下是居裡貓的程式碼:

#include<stdio.h>
#include<fstream.h>
#include<iostream.h>
#include<string.h>
void main()
{
    char str[200];    //存放字元用陣列
    int i,len1,sum=0,tmp=0;    // for 迴圈用索引,字串長度,數字加總,存放數字
    ifstream fip("b.txt");
    while(fip.eof()!=1)
    {
        fip.getline(str,200,'\n');
        cout << str << endl;
        len1=strlen(str);
        for(i=0;i<len1;i++)    //利用 for 迴圈判斷出數字
        {
            if(str[i]!=' ')    //假如字串內容不等於空白
            {
                if(str[i]>='0' && str[i]<='9')    //假如字串內容等於 0~9
                {
                    tmp=tmp*10+(str[i]-'0');    //將字串內容轉換成數字
                }
            }

            //假如字串下一個內容為 a~z or A~Z or 空白
            if(str[i+1]>='a' && str[i+1]<='z' || str[i+1]>='A' && str[i+1]<='Z' || str[i+1]==' ' )   
            {
                //判斷存放的數字是否滿足四位數,不滿足補足四位數,在加總起來
                if(tmp>=1 && tmp<=9)
                {
                    sum+=tmp*1000;
                    tmp=0;
                }
                else if(tmp>=10 && tmp<=99)
                {
                    sum+=tmp*100;
                    tmp=0;
                }
                else if(tmp>=100 && tmp<=999)
                {
                    sum+=tmp*10;
                    tmp=0;
                }
                else if(tmp>=1000)
                {
                    sum+=tmp;
                    tmp=0;
                }
            }
        }
    }
    cout << "Ans=" << sum;
    fip.close();
}


以下是執行後的結果(一):
txt 檔案的內容為:
Cyut54is a356good 72school
Ne125ver 56give22 66up


結果(二):
txt 檔案內容為:
T357aiwan i246s go15od co32untr10y an79d I lo258ve it

以上簡單的分享,希望大家還看得下去!

沒有留言:

張貼留言