我的GitHub地址:https://github.com/Yuetao1219/lessons WC 項目要求 wc.exe 是一個常見的工具,它能統計文本文件的字元數、單詞數和行數。這個項目要求寫一個命令行程式,模仿已有wc.exe 的功能,並加以擴充,給出某程式設計語言源文件的字元數、單詞數和 ...
我的GitHub地址:https://github.com/Yuetao1219/lessons
WC 項目要求
wc.exe 是一個常見的工具,它能統計文本文件的字元數、單詞數和行數。這個項目要求寫一個命令行程式,模仿已有wc.exe 的功能,並加以擴充,給出某程式設計語言源文件的字元數、單詞數和行數。
實現一個統計程式,它能正確統計程式文件中的字元數、單詞數、行數,以及還具備其他擴展功能,並能夠快速地處理多個文件。
具體功能要求:
程式處理用戶需求的模式為:
wc.exe [parameter] [file_name]
基本功能列表:
wc.exe -c file.c //返迴文件 file.c 的字元數
wc.exe -w file.c //返迴文件 file.c 的詞的數目
wc.exe -l file.c //返迴文件 file.c 的行數
項目分析與實現
1.統計文本文件,首先要讀入文件,並確保文件存在並可讀。用exists()方法和canRead()方法對輸入的文件進行判斷。代碼如下:
2.對於要執行的操作,用-c統計字元,-l統計行數,-w統計單詞,-z統計字母。設計思路:以字元串的形式輸入一個或多個操作符,用空格隔開。然後用split()方法將字元串以空格分成一個或多個字元串數組,最後遍曆數組實現想執行的操作。
3.統計字元數和行數。用read()方法依次掃描文件內的每一個字元,遇到'\n',則rows++,遇到!(' '&&'\n'),則chars++。
4.統計單詞。這個也是相對比較難的操作。因為對代碼中單詞的定義是不明確的,比如:int(算是一個單詞嗎?),char_count(算是一個單詞or兩個單詞)。既然要統計,就得找到一個明確的標準。我的標準是,對於兩個及兩個以上連續的字母則為一個單詞,除字母以外的字元作為單詞與單詞之間的分隔符。例如:對於前述的例子,int 算是一個單詞,char_count算是兩個單詞char和count。於是,既然找到了是否是單詞的定義,那麼怎樣用代碼來實現?
前面的統計字元數和行數都是直接對文本文件進行依次掃描,那麼統計單詞,就是在統計字母的基礎上,加上一個flag對字母是否連續進行判斷,以此到達統計單詞的目的。代碼如下:
首先判斷是否是字母,如果是,則flag++,不是,則flag置0。當flag>=2(滿足至少兩個字母連續),且當前字母不是字母,則words++。
遇到的困難:我最開始想到上面這個思路後,用代碼實現,我只是對flag>=2&&a不是字母進行了判斷,並words++,flag=0。沒有想到當flag=1時a不是字母的情況,此時,沒有將flag置0,儘管代碼沒有被報錯,但是,我運行程式後,多次輸入不同的測試文件,得出的輸出值都是錯誤。後來,我仔細分析了該段代碼,找到了代碼不嚴謹而導致錯誤的地方,沒有對掃描會出現的所有情況進行逐一分析,只想到了大多數情況,忽略了一些不起眼的小問題而導致這段代碼進行了錯誤的計算。經過思考和改正代碼,然後又輸入多個不同文件進行驗證,都得到了理想的輸出結果。
測試:
總結:代碼量比較少,但是基本實現了對文本文件的字元數、行數、單詞和字母的統計,還沒有實現對空行數、註釋行數和代碼行數進行統計,需要改進和升級的地方還有很多。條條大路通羅馬,對於這個項目要求,一定有很多的方案和設計,以及更簡潔的代碼,所謂簡潔,不只是代碼量少,而且時間複雜度低。
PSP
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 210 | |
· Estimate | · 估計這個任務需要多少時間 | 180 | 240 |
Development | 開發 | 150 | 210 |
· Analysis | · 需求分析 (包括學習新技術) | 50 | 90 |
· Design Spec | · 生成設計文檔 | 60 | 80 |
· Design Review | · 設計覆審 (和同事審核設計文檔) | 30 | 40 |
· Coding Standard | · 代碼規範 (為目前的開發制定合適的規範) | 40 | 50 |
· Design | · 具體設計 | 40 | 50 |
· Coding | · 具體編碼 | 90 | 120 |
· Code Review | · 代碼覆審 | 20 | 30 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 45 | 50 |
Reporting | 報告 | 30 | 40 |
· Test Report | · 測試報告 | 30 | 30 |
· Size Measurement | · 計算工作量 | 30 | 30 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 20 | 20 |
合計 |