【項目1 - 小玩檔案】
(1)下面程式的功能是統計文本檔案abc.txt中的字元個數,請填空将程式補充完整。
(2)下面程式的功能是将文本檔案abc.txt中的所有行加上行号後寫到newabc.txt檔案中,請填空将程式補充完整。
(3)用鍵盤輸入檔案名,統計輸出檔案中每個字母、數字字元出現的次數;
(4)用鍵盤輸入檔案名,統計輸出類似下面的資料(每個漢字2位元組,每位元組最高位為1)。
提示1:隻在dos視窗中輸出即可;
提示2:不必完成所有統計,有體驗即可;
提示3:上述統計結果,來自檔案aboutcpp.txt。
【項目2-用檔案儲存的學生名單】
檔案score.dat中儲存的是若幹名學生的姓名和c++課、高數和英語成績。
(1)定義學生類,其中包含姓名、c++課、高數和英語成績及總分資料成員。
(2)用對象數組進行存儲學生的成績,讀入成績并計算總分;将總分高于平均總分且沒挂科的同學的資訊儲存到檔案pass_score.dat中。
讨論:學生人數和總分的另外一種解決方法是用全局變量。但這兩種資訊與學生有關,是學生類的“屬性”,成為學生類的資料成員合适;這兩種資訊由學生整體決定,用作靜态資料成員合适。如不了解這樣設計的理由,複習課程前面的相關内容。
【項目3-oop版電子詞典】
做一個簡單的電子詞典。在檔案dictionary.txt中,儲存的是英漢對照的一個詞典,詞彙量近8000個,英文、中文釋義與詞性間用’\t’隔開。
(1)程式設計式,由使用者輸入英文詞,顯示詞性和中文釋義。
提示1:如果要用oop完成這個詞典(當然也可以用oo方法實作),可以定義一個word類表示一個詞條,其中的資料成員string english; 表示英文單詞,string chinese;表示對應中文意思,string word_class;表示該詞的詞性;還可以定義一個dictionary類,用來表示詞典,其中word words[8000]成員表示詞典中的詞條,int wordsnum;表示詞典中的詞條數,在構造函數中從檔案讀入詞條,而專門增加一個成員函數用于查單詞。
提示2:檔案中的詞彙已經排序,故在查找時,用二分查找法提高效率。
提示3:這樣的項目,最好用多檔案的形式組織
(2)(選做)使用這個詞典,讀入一篇文章,輸出對其中的所詞的解釋。例如,對aboutcpp.txt,輸出如下左圖結果所示(也可以看到其中待改進的地方)。
(3)(選做)試用wxwidgets或mfc,做一個視窗版的電子詞典,如上右圖所示:
【項目4 - 處理c++源代碼的程式】
在codeblocks等ide中都提供了代碼格式整理的功能。完成這種功能的程式,操作的資料是用c++寫的源代碼檔案。c++源檔案是一種文本檔案,可以通過程式進行操作。
內建開發環境(ide)對對程式進行編譯,操作的“資料”是源程式。編譯中,要對源程式進行詞法檢查和文法檢查,後續還要進行目标代碼生成、代碼優化等工作。相關的技術将在《編譯原理》課中學習。這些技術可以用在很多領域,當然也能夠讓我們對于程式設計語言有更深的了解。
本項目将以c++源程式為操作對象,完成對源程式的一系列處理。各功能可以分别編制一個程式實作(建議用這種簡單的方案),也可以将其內建在一起(向着自己做出ide努力)。
(1)讀入一個c++程式,判斷其中是否隻有一個main()函數,輸出“暫時沒有發現問題”,或者“沒有main()函數”,或者“不能定義多個main()函數”;
提示1:簡單處理,可以隻比較判斷”main()”,考慮實際上的各種可能,main後面的括号中有任意多個空格及void的都應該算在内。建議按最簡單的情形處理。
提示2:建議設計一個函數,将讀到的代碼與字元串”main()”進行比較。函數用于判斷s1是否“包含”在讀入的一行s2中,調用時,形參s1處的實參用”main()”即可,這樣寫提升了“抽象”級别,更容易實作,對應更高的代碼品質。
(2)讀入一個c++程式,使程式中的所有左花括号“{”和右花括号“}”都單獨占一行,新程式儲存到另一個.cpp檔案中,并在螢幕上顯示處理過的程式,顯示時加上行号。
(3)讀入一個c++程式,輸入m、n兩個數字,從第m行起的n行代碼将作為注釋使用(即在這些行前面加上”//”),新程式儲存到另一個.cpp檔案中,并在螢幕上顯示處理過的程式,顯示時加上行号。
文字處理領域能做的工作也就此向大家敞開大門,下面一些功能作為選做内容,請有餘力的同學參考,想。
(4)(選做)讀入一個c++程式,将程式中的所有注釋(包括//形式和/*...*/形式的)删除,新程式儲存到另一個.cpp檔案中,并在螢幕上顯示處理過的程式,顯示時加上行号。
(5)(選做)讀入一個c++程式,使程式中:(1)所有左花括号“{”和右花括号“}”都單獨占一行;(2)每個語句單獨占一行;(3)各行采用統一的縮格排放(每遇一個“{”,其下一行的程式,在第一個有意義的符号前的空格數增加4(也可以是增加一個’\t’),每遇一個“}”,其下一行的程式,在第一個有意義的符号前的空格數減少4(也可以是一個’\t’))。
(6)(選做)基于(5),用wxwidgets設計界面,在對話框中選擇要處理的源檔案名,并指定目标檔案名後進行處理。如在左圖中點選按鈕“…”後,會利用“打開檔案對話框”(wxfiledialog)視窗選擇檔案。