程序可讀入任意英文文本文件,該文件中英文詞數大於等於1個。git
程序須要很壯健,能讀取容納英文原版《哈利波特》10萬詞以上的文章。github
指定單詞詞頻統計功能:用戶可輸入從該文本中想要查找詞頻的一個或任意多個英文單詞,運行程序的統計功能可顯示對應單詞在文本中出現的次數和柱狀圖。算法
高頻詞統計功能:用戶從鍵盤輸入高頻詞輸出的個數k,運行程序統計功能,可按文本中詞頻數降序顯示前k個單詞的詞頻及單詞。框架
統計該文本全部單詞數量及詞頻數,並能將單詞及詞頻數按字典順序輸出到文件result.txt。學習
測試機環境:Windows測試
開發環境:CFree5編碼
利用指針功能設計
打開txt文件,若打開成功則返回文件起始位置給p指針指針
利用flag作標誌統計每一個單詞出現的頻率代碼規範
將單詞按字典順序排序,即經過比較ascii值來進行冒泡排序
英文文本:
開發平臺:
運行界面:
檢查文件結束:
while(!feof(p)) { for(j=0;j<20;j++) { temp[j]=fgetc(p); if(temp[j]==' '||temp[j]==','||temp[j]=='.'||temp[j]=='!'||temp[j]=='?') { temp[j]='\0'; strcpy(s[b].w,temp); b++; break; } } }
統計單詞出現頻率:
void pv() { int j,k,flag=1; for(j=0;j<b;j++) { for(k=0;k<j;k++) { if(strcmp(s[j].w,s[k].w)==0) { flag=0; break; } else flag=1; } while(flag) { for(k=j;k<b;k++) { if(strcmp(s[k].w,s[j].w)==0) s[j].num++; } flag=0; } } }
將單詞按字典順序排序:
void px() { int j,k,c; char temp[20]; for(j=0;j<b-1;j++) { c=j; for(k=j+1;k<b;k++) { if(strcmp(s[c].w,s[k].w)>0) c=k; if(c!=j) { strcpy(temp,s[c].w); strcpy(s[c].w,s[j].w); strcpy(s[j].w,temp); } } } }
這應該是目前爲止作的最難受的一次實驗,對於在語言缺少和算法短板上的缺陷體現的淋漓盡致,本身的問題仍是須要本身解決,沒什麼救世主,上網普遍瀏覽現有程序代碼,借鑑其中的部分程序源碼,主體框架採用C語言,最後又加入C++部分代碼實現圖形化用戶界面,最終實現要求中的個別功能。半路出家的本身與他人的差距內心甚是明瞭,之後的學習該怎麼進行纔是接下來主要攻克的難題。
PSP2.1 | 任務內容 | 計劃共完成須要 的時間(min) |
實際完成須要 的時間(min) |
---|---|---|---|
Planning | 計劃 | 10 | 8 |
Estimate | 估計這個任務須要多少 時間,並規劃大體工做步驟 |
9 | 8 |
Development | 開發 | 100 | 120 |
Analysis | 需求分析 (包括學習新技術) | 10 | 15 |
Design Spec | 生成設計文檔 | 5 | 5 |
Design Review | 設計複審 (和同窗審覈設計文檔) | 4 | 5 |
Coding Standard | 代碼規範 (爲目前的開發制定合適的規範) | 3 | 3 |
Design | 具體設計 | 15 | 20 |
Coding | 具體編碼 | 60 | 90 |
Code Review | 代碼複審 | 10 | 10 |
Test | 測試(自我測試,修改代碼,提交修改) | 20 | 30 |
Reporting | 報告 | 10 | 10 |
Test Report | 測試報告 | 5 | 4 |
Size Measurement | 計算工做量 | 5 | 3 |
Postmortem & Process Improvement Plan | 過後總結 ,並提出過程改進計劃 | 5 | 5 |
最重要的是一點要學會至少一門語言,不然步履維艱!
Github的倉庫主頁的連接地址:Github連接