English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

例:
九十五學年度四技二專聯合甄選委員會南台科技大學指出,技優甄保今年首度採行網路選填志願,共有六千兩百六十七人符合網路選填志願資格,實際上有六千零五十四人完成志願選填,共有四千六百三十一人錄取,錄取率達百分之七十七點五。

讀入一篇短文
欲計算裡面出現的單字(如:人) 出現三次
出現的次數
如何用C寫這個程式

2006-07-12 10:51:18 · 3 個解答 · 發問者 末日 1 in 電腦與網際網路 程式設計

再請問那如果要改成算
四技二專,資格,錄取
這類不是單字的 又要如何寫比較好呢?

2006-07-18 06:47:51 · update #1

3 個解答


圖片參考:http://img80.imageshack.us/img80/8937/07142rx.jpg
#include#includevoid main(){ FILE *fp,*tp; tp=fopen("bb.txt","r"); char bfr[255],word[10][10]; char *pch; int i=0,s=0; while(fgets(word[i],10,tp)!=NULL) {  word[i][2]='\0';  fp=fopen("aa.txt","r");  while(fgets(bfr,255,fp)!=NULL)  {   pch=strstr(bfr,word[i]);   s++;   while(pch!=NULL)   {    pch=strstr(pch+1,word[i]);    if(pch!=NULL) s++;   }  }  printf("\"%s\" 出現 %d 次\n",word[i],s);  i++;s=0; }}ps..我用的方法比較平常,請見諒。

2006-07-14 06:56:07 · answer #1 · answered by Almond 6 · 0 0

BIG5常用字5401,加上非常用字有13053,是可以不需要用到32768那麼多個counter.
不過要自己去找範圍表,因為中文字有跳號,並非全都連續.

2006-07-13 08:12:31 · answer #2 · answered by ? 2 · 0 0

一個中文字是由 2 個 byte 的資料構成的。
你可以宣告一個 integer array (int C[32768]),把它全歸 0 (用 memset 或 bzero)。
讀進一個個中文字(判斷一下第一個讀進的byte有沒有 >127,沒,英文;有,中文,請讀下一個byte來合成一個中文)。(〝可〞用 union 來讓 2 個 char 〝自動〞變成一個 short。)

把第〝中文字組成的 integer 減去 32768〞個陣列內容加 1 (如 〝一〞 的 BG5 碼是 42048,就寫 C[c-32768]++ ,C[] 是您的 array, c 是中文字的 integer,以〝一〞為例,c=42048,所以是 C[9280]被加了 1。)

讀完全檔後,把值不是 0 的字印出值來,就可以了。

這方法的好處:
 1. 只用了 32728 個 units (看你要用 char, short, int, 還是 long),就可處理〝相當〞大的文件檔。
 2. 可用於相當多種的內碼系統,而程式本身卻完全沒有處理到內碼系統的問題。

你是問〝如何〞嘛,所以,我只寫方法,不寫程式囉!
程式自己寫,才會進步!

加油!! ^_^

2006-07-14 00:35:15 補充:
那還要去轉換這、轉換那的!
要是在15年前,我會這麼寫,我在15年前還真的這麼寫過。
現在,RAM那麼大,小斌應該也是初學者,還要再解釋 BIG5的 對應法,再考慮使用者造字...
所以,我才用這樣的方法。
還順便免了(現在很少遇到的)內碼不同的問題。
而倚天最後又把BIG5的13053擴充成13094,Windows也把它收下了。
所以,我覺得,還是這樣最簡單,好學、在現代電腦不會有RAM不夠的問題、程式也不見得會比較慢、又能吃下使用者造字、不同內碼的問題。

2006-07-15 00:06:05 補充:
建議:
在ASD的程式最後2個}} 之間加上
fclose(fp);
不然,bb.txt檔一大,會出問題。

2006-07-24 05:47:41 補充:
〝又要如何寫比較好呢〞
好很難定義耶!
寫程式時比較快?
跑程式時比較快?
原始程式比較短?
執行程式比較短?
比較不會出問題?
比較省記憶體?
...
太多了!

2006-07-12 12:38:39 · answer #3 · answered by ? 7 · 0 0

fedest.com, questions and answers