第一次個人項目【詞頻統計】——需求分析,代碼規範,設計思路
阿新 • • 發佈:2018-03-29
get 數據 處的 哈希表 ring 關註 區分 www 代碼規範
需求分析
- 由於程序需要在Windows平臺和Linux平臺都能運行,因此對代碼的可移植性有一定的要求
- 由於需要對文件夾進行遍歷,因此數據量相對較大,需要選擇合適的數據結構,在此項目中,樹和哈希表都是可供選擇的數據結構
- 由於對字符串的處理很多,因此需要選擇一種合適的字符串表達方式,char* or string?
代碼規範
核心要求:用代碼做到“卒章顯誌”的作用,代碼能說清楚的事情就不要用註釋,註釋僅提示思路或者註意事項。因此變量名和函數名的設置尤為關鍵,比如函數名isSamePhrase(),又比如變量名bool isStringStart.
以下根據常用的C/C++編碼規範列舉了如下要求:
【通用】
- 系統頭文件應用:
#include <xxx.h>
- 自定義同文件應用:
#include "xxx.h"
- 函數體類體之間原則上用2個空行,特殊情況下可用一個或者不需要空行。
【註釋】
- 調試的代碼,加上註釋
// only for DEBUG
- 需要引起關註的代碼,加上註釋
// NOTE ...
- 對於較大的代碼塊結尾,如
for,while,do
等,可加上// end for|while|do
【命名規範】
- 同一性:在編寫一個子模塊或派生類的時候,要遵循其基類或整體模塊的命名風格,保持命名風格在整個模塊中的同一性。
- 標識符組成:標識符采用英文單詞或其組合,應當直觀且可以拼讀,可望文知意
- 最小化長度 && 最大化信息量原則:在保持一個標識符意思明確的同時,應當盡量縮短其長度。
- 避免過於相似:不要出現僅靠大小寫區分的相似的標識符,例如
"i"
與"I"
,"function"
與"Function"
等等。 - 避免在不同級別的作用域中重名:程序中不要出現名字完全相同的局部變量和全局變量,盡管兩者的作用域不同而不會發生語法錯誤,但容易使人誤解。
- 正確命名具有互斥意義的標識符:用正確的反義詞組命名具有互斥意義的標識符,如:
"nMinValue"
和"nMaxValue"
,"GetName()"
和"SetName()"
…. - 避免名字中出現數字編號:盡量避免名字中出現數字編號,如
Value1,Value2
【代碼風格】
- 每一行開始處的縮進只能用Tab
- 在代碼行的結尾部分不能出現多余的空格
- 除了特別情況,函數體內不能出現兩個空行
"if"、"for"、"while"、"do"、"try"、"catch"
等語句自占一行,執行語句不得緊跟其後。不論執行語句有多少都要加"{ }"
。這樣可以防止書寫和修改代碼時出現失誤- if語句如果有else語句,用 } else { 編寫為一行,不推薦用 3 行代碼的方式。
- 多行變量定義,為了追求代碼排版美觀,可將變量豎向對齊。
- 對於switch語句,若某個case不需要break一定要加註釋聲明。
設計思路(概述)
- 遍歷給定的文件夾,並將文件的絕對路徑存在vector中
- 遍歷vector,逐文件統計信息
- 為了提高效率,采用邊讀文件變統計信息的方式
- 由於單詞量很大,因此采用平衡二叉樹作為數據組織結構
- 由於對單詞進行重定義,所以不能直接使用fgets或者fscanf讀字符串,而應該逐字符掃描判斷是否為單詞。
- 由於需要統計詞組,因此可以用一個char *存儲上次讀過的字符串
第一次個人項目【詞頻統計】——需求分析,代碼規範,設計思路