本程序演示用C++編寫,完成MFC創(chuàng)建的文章編輯器NoteLite,用Brute Froce算法來實現(xiàn)匹配,刪除和替換功能。并統(tǒng)計主編輯框的字符總數(shù),數(shù)字總數(shù),空格總數(shù),字母個數(shù)及與測試編輯框的內(nèi)容匹配的總數(shù)和文章的總行數(shù),能對相應(yīng)的操作進(jìn)行無限撤消和無限重做。
輸入值的范圍:主編輯框,測試編輯框,替換編輯框均可輸入任意字符。在插入字符時要求測試編輯框的內(nèi)容的長度加上主編輯框的內(nèi)容的長度不超過主編輯框長度的允許范圍。在替換字符時要求替換后主編輯框的內(nèi)容長度不能超過主編輯框長度的允許范圍。
輸出形式:統(tǒng)計的結(jié)果會在相應(yīng)的編輯框顯示,其中行數(shù)和字符個數(shù)即時顯示。
測試數(shù)據(jù)
A 要主編輯框中輸入:文章編輯器 V1.0 Beta
得到字符總數(shù)20,行數(shù)1.統(tǒng)計后得到字母個數(shù)5,空格個數(shù)2,數(shù)字個數(shù)2.
B 在測試編輯框中輸入:文章編輯器
單擊匹配得匹配次數(shù)1,單擊刪除主編輯框的內(nèi)容變?yōu)?V1.0 Beta",單擊插入主編輯框恢復(fù)"文章編輯器 V1.0 Beta"。
C 在替換編輯框中輸入:NoteLite
單擊替換主編輯框的內(nèi)容變?yōu)?NoteLite V1.0 Beta"
D 單擊清空主編輯框的內(nèi)容被清空,單擊撤消變?yōu)?文章編輯器 V1.0 Beta",單擊重做主編輯框的內(nèi)容再被清空。
本次實訓(xùn)初始使用MFC來開發(fā)一個文章編輯器,首先去了解了相關(guān)的類,當(dāng)開始發(fā)現(xiàn)CEditeView類建立的單文檔已經(jīng)實現(xiàn)的一個文章編輯器的大部分功能,只需要做的是重寫里邊的函數(shù)達(dá)到實訓(xùn)的目的.但由于對單文檔的運用過于生疏,由于時間不允許只能換回比較上手的基于對話框的開發(fā),也只用CEdit類.先寫了一個開發(fā)的計劃,要實現(xiàn)的功能有兩個亮點:1是能按列選擇并刪除或替換;2是能實現(xiàn)無限撤消和刪除.最后才考慮用KMP算法實現(xiàn)查找匹配等功能.在開發(fā)過程中發(fā)現(xiàn)要實現(xiàn)第一點并非一件容易的事,要使用到的知識遠(yuǎn)遠(yuǎn)超出我的知識范圍,只能開始第二點,首先想到的是用棧來實現(xiàn),但在MFC里這也不是件容易的事,因為如何捕獲文本框的即時內(nèi)容變化呢?換成數(shù)組就好辦多了,可以在文本框焦點得失時保存入相應(yīng)的數(shù)組里,這里設(shè)兩個數(shù)組,一個用于撤消,一個用于重做,最后完美的實現(xiàn)了第二點.在第三點中算法是沒有問題,但在運行時出現(xiàn)一個系統(tǒng)的錯誤,這個常見的錯誤一般是空指針,下標(biāo)越界等引起,但在調(diào)試過程中并未找到出錯的下標(biāo).最后改成Brute Froce算法才得以實現(xiàn)刪除,替換,匹配的功能.當(dāng)然這個算法效率不佳,但對于這個小程序足矣.其實在實現(xiàn)刪除,替換功能時一定要注意的一點是在文本框的內(nèi)容改變時要重新獲取內(nèi)容才能有達(dá)到目的.這一點也是我在調(diào)試過程中發(fā)現(xiàn)的,很多問題總是在調(diào)試過程中得以解決.
另外有一點我始終不明白,本想統(tǒng)計漢字的個數(shù),由于用平常的方法無法實現(xiàn),就想到用總字符減去空格,數(shù)字,字母,標(biāo)點余下的應(yīng)該就是漢字了,可以系統(tǒng)卻把一個漢字當(dāng)成了兩個標(biāo)點符號了,而我的標(biāo)點符號集里并沒有漢字.這一點會在今后的學(xué)習(xí)中多加了解,因為一個要國際化的軟件總是應(yīng)該要支持多國語言的.
這次實訓(xùn)鍛煉了我?guī)讉€方面的功能:1. 規(guī)劃能力;2. 自學(xué)、獨立解決問題能力;3. 知識捕獲、信息整理能力;4. 美工設(shè)計、排版能力;5. 綜合運用知識能力