Github項目地址 | Github地址 |
---|---|
結對夥伴 | 黃天兵201831061126的博客 |
①代碼結構:
程序由一個 wordsCount 類, main() 主函數和 Getop(string cmd) 獲取命令參數函數構成。其中 wordCount 類成員中含 Char_num() 、 Lines_num() 等函數。思惟導圖以下:
②.關鍵函數實現:
int wordsCount::Char_num() :獲取ascii數html
獲取輸入文件路徑後,經過對文件內容逐個讀取,並只對ASCII碼進行計數。git
int wordsCount::Lines_num():獲取文件行數github
使用 getline() 函數獲取文件的每一行對行數進行計數。編程
void wordsCount::GetWords()、int wordsCount::Words_num() 、void wordsCount::Sort_words_rate()ide
因爲對單詞時有額外的要求:單詞計數,按照出現頻率和字典排序,以小寫輸出。因此使用多個函數實現:
(1) void wordsCount::GetWords() :逐個讀取文件字符,將全部符合要求的「單詞」提取出來,轉爲小寫形式後(使用 algorithm 頭文件中的 transform() 函數 ),存放在一個 vector< string > 容器中。
(2) void wordsCount::Sort_words_rate():對於統計詞頻首先想到的是用 pair<string , int> 記錄詞頻,排序則使用algorithm頭文件下的 sort() 函數。因而乎爲了方便統計詞頻,先排序,使相同的單詞在一起,再統計詞頻,統計好的詞頻存放在 vector<pair<string , int>> 中,再對其詞頻進行排序。(sort()函數中第三個參數提供了自定義排序標準)
__main(int argc, char *argv[])__ :主函數函數
main()函數主要接受用戶從操做系統傳入的參數,參數經過Getop()函數解析後執行不一樣的輸出。性能
③.編程思想體現
Interface Design:單元測試
對於接口的設計,咱們將wordCount這個類中全部屬性和成員函數的定義與實現分開測試
Information Hiding:ui
信息隱藏,簡單地說就是是否可見是否與可用。
不可見不可用:
咱們將類的屬性和成員定義放在wordCount.h的頭文件中,實現部分放在wordCount.cpp中,使類中內容對外部而全然隱藏。
可見不可用:
經過使用private、protect對類中成員和屬性進行修飾。包含頭文件後,即便能看到這些屬性,卻沒法使用它們
④效果展現
①編碼規範:
咱們採用的是Google的C++編碼規範
中文版
Google C++編碼規範
②複審過程:
Vs2017具有強大的努力的複審功能,能夠進行智能縮進,大大提升了規範性。vs2017是真的功能強大。
根據參考文獻咱們對代碼稍微作改動,使它陷入循環,VS2017自帶的「性能探查器"真的好用
性能分析報告:
單元測試參考文獻Part3
①出現問題:在按照上面文獻的步驟流程作完之後,發現測試仍是沒有經過
②解決問題:測試代碼也確定沒有問題。通過不斷的摸索,發現原來是測試用的文件應該放在這裏頭
③總結:測試中的待打開的文件不能與代碼放在一塊兒,須要放在與後綴爲「.exe」相同的路徑下。
④測試結果:因爲水平有限,只測試了幾個函數,而且通過長時間摸索仍是解決了問題。經過了測試。
測試的幾個函數:Char_num(),int Lines_num(),int Words_num();終於仍是經過了測試
1.拋出異常:
·文件打開失敗:
·用戶未輸入參數、參數個數錯誤、參數不包含「-i」和「-o」:
·檢查「-n」和「-m」後面的參數是否爲數字:
在程序中使用了stoi()函數實現字符串轉整型,若轉換失敗則會自動拋出異常。
2.捕獲異常:
使用try-catch對異常進行捕獲
3.測試結果:
①錯誤輸入
②正確輸入
①感覺:
我和我室友黃天兵同窗進行結對編程,兩我的相互討論的模式其實之前也有用到,不過此次的更加全面完善,咱們確實感受到了1+1>2的效果。隊友的代碼量大大高於我,能力也強。我更多的時間花在了代碼的單元測試上。可是經過此次結對編程確實也感受到了本身和大佬的差距,也複習了之前沒搞清楚的有關字符的知識點。夥伴的堅持精神也深深感染了我。仍是那句老話「革命還未成功,同志還需努力。最後感謝」
②照片: