Github項目地址:(https://github.com/913680749/personal-project/tree/master/Cplusplus/031602133)node
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 40 | 40 |
· Estimate | · 估計這個任務須要多少時間 | 10 | 10 |
Development | 開發 | 240 | 300 |
· Analysis | · 需求分析 (包括學習新技術) | 40 | 90 |
· Design Spec | · 生成設計文檔 | 40 | 30 |
· Design Review | · 設計複審 | 25 | 20 |
· Coding Standard | · 代碼規範 (爲目前的開發制定合適的規範) | 30 | 30 |
· Design | · 具體設計 | 50 | 60 |
· Coding | · 具體編碼 | 180 | 240 |
· Code Review | · 代碼複審 | 30 | 40 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 60 | 100 |
Reporting | 報告 | 50 | 60 |
· Test Repor | · 測試報告 | 25 | 40 |
· Size Measurement | · 計算工做量 | 5 | 10 |
· Postmortem & Process Improvement Plan | · 過後總結, 並提出過程改進計劃 | 20 | 15 |
合計 | 845 | 1085 |
總的功能大體就是統計單詞,字符和行數還要輸出最高頻的10個。統計的功能可能不會太難實現,可是輸出最高頻的10個單詞和以命令行運行並輸入到文件有點小煩。之前都沒碰見過,又要去自學新的東西了。上網搜了些資料,加上室友的幫助也總算完成了。計數部分沒什麼,關鍵是利用freopen函數進行文件的輸入與輸出,還有map函數的應用,算是解決了最頭疼的問題。
[freopen參考資料] (http://www.javashuo.com/article/p-uttsotmx-gg.html)
[map函數參考資料] (https://blog.csdn.net/gududanxing/article/details/11069919)git
>Charconversion()函數用於實現英文的大小寫轉換 >Countchar()函數用於實現有效字符統計 >Countword()函數用於實現有效單詞統計 >Scan()和Print()函數則分別實現文件的輸入和輸出 >Countmaxword()函數用於實現最大頻數詞的統計輸出
作出這題來感受都不容易了,改進的話有餘力再說吧,帶一張運行結果圖
github
void Wordinsert(string s) /* 向字典樹裏面插入單詞 */ { int len = s.size(), flg; node *p; p = &root; rep(i, 0, len) { flg = Charconversion(s[i]); if (p->next[flg] == NULL) { p->next[flg] = new node(); p->next[flg]->gs = 0; } p = p->next[flg]; if (i == len - 1) { p->gs++; } } }
利用字典樹不只能夠節約空間還能夠大幅度縮短期複雜度編程
int Countword() { int tp = 0; rep(i, 0, linenum) { bool f = 1; int lim = line[i].size(); rep(j, 0, lim) { if (is_efct_char(line[i][j])) { string str = ""; str += line[i][j]; rep(k, j + 1, lim) { if (is_efct_char(line[i][k]))str += line[i][k], j = k; else { j = k; break; } } bool f = 0;; int siz = str.size() - 1; rep(k, 0, siz) { if (str[k] >= '0'&&str[k] <= '9' && (str[k + 1]<'0' || str[k + 1]>'9'))f = 1; } if (!f) /* 對其是不是有效單詞進行判斷 */ { tp++; Wordinsert(str); /* 利用前面的插入函數向字典樹中插入單詞,字典樹不只能夠節約空間還能夠大幅度縮短期複雜度 */ } } } } return tp; }
本來沒有引用字典樹只用map函數的時候編完之後運行會比較耗費時間,在查閱資料和舍友的提議下借鑑並使用了字典樹,勉強算是一個亮點吧。函數
總體看來覆蓋率是挺高的,甚是欣慰。性能
老實說,已經開始後悔沒退選了,我的編程基礎能夠說至關的不咋地,作這一個做業都累了半死,對接下來的日子感到深深的擔心。不過總的來講的話感受我花的編碼時間比較久。並且若是直接一整套代碼打下來我應該也不至於用這麼久,可是又要封裝,又要單元測試啥七的八的都要去學,也花了很多時間。並且以前也沒用過github,操做啥的都會比較生疏。