標籤:style blog http color 使用 java strong 檔案 資料
在奮鬥了24+小時之後,終於完成了軟體工程第一次項目。中間有很多曲折,也收穫了很多經驗。
預計完成時間:複習C++(一小時);構思(半小時);編碼(四小時);調試(二小時);其他(半小時)。合計(八小時)。
實際完成時間:複習C++(兩小時);構思(半小時);編碼(三小時);調試(五小時+);最佳化(三小時)。合計(十三小時+)。
首先是審題方面。
這個要求裡面最需要注意的有三點:
1、單詞的構成,前三個必須是字母,後面可以接任意多的字母或數字,其他字元均視為分隔字元。
2、忽略大小寫
3、123file裡的file不能算為一個單詞,所以在用Regex的時候需要特別注意。
其次是軟體的初步構思。
這裡我思考了如下幾點
1、首先是語言的選擇,C++和C#。這兩種語言我都沒有系統的用過,暑假的時候自學過C#,上學期也閱讀過《C++編程思想》,但最終還是選擇了與C語言相近的C++。
2、其次是面向過程還是物件導向。這個程式有三個部分,但三個部分不會同時運行,而是根據命令列參數輸入的不同來決定運行哪一個部分。所以我選擇了物件導向的程式設計。將程式的三個部分分別寫入三個類,根據命令列輸入的不同來new相應的對象。這樣設計程式相對條理清晰,也減少了出錯的幾率。
註:這三個部分其實有很多功能是一樣的,可以考慮將類劃分開來,合并相同的部分,減少代碼重複,減輕編碼工作量。(不過我還沒這樣做,實在是沒精力修改了)
3、再者是檔案的掃描。之前使用java語言的時候,有檔案類可以直接用,相當方便。但是當我開始寫程式的時候發現c++並沒有這樣的類,所以經過各種百度和詢問同學,使用了_finddata_t這個強大的結構體。(雖然我還沒完全弄明白這個結構體的功能)這樣一來就可以遞迴檔案目錄進行檔案掃描。
4、然後是單詞讀入。大致分為兩種方法,一種是逐個字元讀入,另一種是讀入全部字元然後進行分析。我個人傾向於後者,因為這樣批量處理效率高,代碼簡潔。
5、最後是結果儲存的資料結構。一種是線性表,一種是二叉樹。但程式涉及尋找有無相同元素,所以二叉樹會節省很多時間。
下面是程式測試結果,我先測試了vs的安裝目錄。
效能分析如下:
由於我沒有使用雜湊表,所以程式效率並不太高,但也還能接受。
編碼過程中遇到的問題:
1、初始化的問題,任何對象在使用之前最好初始化,避免程式崩潰。
2、建立二叉樹的問題。這個問題我不止一次犯過。(應該好好反思)就是遞迴建立的時候,建立立的節點沒有接到樹根上。所以導致程式崩潰。
3、關於程式效率的問題。最開始我用的vector來存的資料,在測試資料量較大時,耗時明顯過長。後來改為用二叉樹儲存,效率明顯提升。
學到了什麼:
1、編程之前對程式應有整體的構想。
2、應養成良好的編程習慣,降低代碼出錯率。
3、應在資料結構和演算法上對程式進行最佳化。
關於軟體工程第一次項目的一些感想