結對編碼過程:我與結對編碼的同伴,首先是各自分別閱讀項目條件,以後開始討論各自對於此次做業的理解。隨後咱們把本身要作的工做細緻的分工,最重要的一點是缺點二人代碼的鏈接方式,以便儘量少的對代碼進行沒必要要的修改,最後把寫好的代碼互相交換來審閱達到找出錯誤的目的。最後緊行代碼的彙總調試,獲得想要的結果。html
PSP2.1c++ |
Personal Software Process Stagesgit |
預估耗時(分鐘)github |
實際耗時(分鐘)編程 |
Planning數組 |
計劃安全 |
10函數 |
15性能 |
· Estimate學習 |
· 估計這個任務須要多少時間 |
190 | 275 |
Development |
開發 |
30 |
90 |
· Analysis |
· 需求分析 (包括學習新技術) |
12 |
15 |
· Design Spec |
· 生成設計文檔 |
18 |
20 |
· Design Review |
· 設計複審 (和同事審覈設計文檔) |
5 |
5 |
· Coding Standard |
· 代碼規範 (爲目前的開發制定合適的規範) |
5 |
5 |
· Design |
· 具體設計 |
5 |
15 |
· Coding |
· 具體編碼 |
30 |
35 |
· Code Review |
· 代碼複審 |
10 |
10 |
· Test |
· 測試(自我測試,修改代碼,提交修改) |
20 |
20 |
Reporting |
報告 |
10 |
10 |
· Test Report |
· 測試報告 |
10 |
10 |
· Size Measurement |
· 計算工做量 |
5 |
5 |
· Postmortem & Process Improvement Plan |
· 過後總結, 並提出過程改進計劃 |
20 |
20 |
|
合計 |
190 |
275 |
(1)、解題思路
將做業分紅兩個部分,即文件的傳入以及字符的識別與計數。由我來負責計數的相關函數實現。對於字符的計數,爲了節約內存打算使用動態的內存申請,經過遍歷鏈表來判斷是不是新字符以及增長次數,同時用結構體來進一步的簡化代碼。首先是關於c++的空間申請,由於從未學習因此在博客園上尋找相關的知識內容。爲了銜接二這的函數打算用數組來傳入字符。
(2)、設計實現過程
爲了使得字符與字符數量緊密結合與代碼簡化,我決定使用結構體來經行工做,同時創建一個類來捆綁相關函數的使用同時確保數據的安全性,其私有成員是字符總數與一個指向結構體的指針(其做用爲頭指針)。函數分爲指針初始化函數,字符計數函數,與鏈表打印函數。字符計數函數形參爲字符數組,完成與文件操做的交接。
(3)、代碼規範
對於命名除了無關變量以外其他所有使用英文命名,若是存在多個英文則使用' _ '字符隔開,其他空格與縮進徹底遵循vs2019自動隔開。
代碼互審:在完成一個模塊後互相審覈與測試,其中代碼錯誤有鏈表頭指針爲空,文件地址不正確,數組的數據溢出
(4)、性能分析
消耗最大函數爲:
int fun(char b[]) { int a; set(); for (a = 0; b[a] != '\0'; a++) { char_counter(b[a]); } return 0; }
嵌入了其餘兩個函數。
代碼改進:最開始是打算把識別與計算分開後來發現這麼一來會遍歷兩次鏈表,形成效率下降,後來使用if語句來實現是否爲新字符,以此來進行操做。
(5)、代碼說明
class way_to_char { public: int set() { use = new struct zifu; use->next = NULL; if (use == NULL) { cout << "分配內存失敗" << endl; } cout << use << endl; return 0; } int char_counter(char b) { if (use == NULL) { return 0; } struct zifu* p; for (p = use->next; p != NULL; p = p->next) { if (p->word == b) { p->number++; char_number++; return 0; } } p = new struct zifu; p->word = b; p->number = 1; p->next = use->next; use->next = p; char_number++; return 0; } int show() { if (use == NULL) return 0; struct zifu* p; char stead; cout << "總的字符數爲" << char_number << endl; for (p = use->next; p != NULL; p = p->next) { if (p->word >= 65 && p->word <= 90) stead = p->word + 32; else stead = p->word; cout << "字符爲" << stead << "出現次數爲" << p->number << endl; } return 0; } int fun(char b[]) { int a; set(); for (a = 0; b[a] != '\0'; a++) { char_counter(b[a]); } return 0; } private: struct zifu* use; int char_number = 0; };
對字符及其操做封裝爲一個類來,包含鏈表建立,字符計數與識別和打印。保護數據與實現代碼簡潔。
(6)、心路與收穫
二人合做剛開始是有些不能接受,感受會大幅的下降勞動效率,而且不肯意聽取他人的意見。可是慢慢的發現二人合做,相互的代碼審覈,可以極大的提升本身的代碼質量,同時工做量的減少可以使得本身可以更加專一於本身的工做部分。雙人合做更容易暴露出本身的代碼問題,可以幫助本身提升編碼水平。如今看來結對編程可以提升代碼質量與效率。