




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
文章編輯數(shù)據(jù)結構設計報告題 目: 簡單編譯器的實現(xiàn) 學 院 信息科學與工程學院學 生 姓 名 尹婷 班 級 學 號 0909101820 指 導 教 師 林立新 日 期 2012.7.03 一、問題描述編寫一個簡單的文章編輯程序,具體功能如下:1.用戶可按行輸入字符串到程序,每行不超過80字2.分別統(tǒng)計出其中每行的英文字母數(shù),數(shù)字數(shù),空格數(shù),以及整篇文章的總字數(shù)3.統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù)并輸出該次數(shù)4.可刪除某一字串,刪除后程序自動將后面的字符前移程序要求:1.存儲結構使用線性表2.分別使用幾個子函數(shù)實現(xiàn)相應功能二、基本要求模塊功能需求 (1)輸入模塊:用戶可在文本輸入框中輸入任意字符,最多輸入80個字符,輸入后保存在程序變量中.(2)編輯模塊:用戶可點擊刪除按鈕,刪除某一行或行中的任何字串. (3)統(tǒng)計模塊:程序會根據(jù)用戶需求統(tǒng)計某一行的英文字母數(shù)、數(shù)字數(shù)、空格數(shù),并自動顯示整篇文章的總字數(shù)(4)顯示輸出模塊:程序會將用戶輸入的文章及統(tǒng)計結果合理清晰的顯示在窗口中三、數(shù)據(jù)結構的設計1、定義結構體 struct line,文本行采用順序存儲,行與行之間采用鏈四 軟件模塊結構圖開始文章輸入、瀏覽、統(tǒng)計串、統(tǒng)計及刪除的詳細流程如下圖所示:選定選項一2211111111111111顯示文本信息且換行輸入文本信息(datai=str0i+k=0;j=0;p-datai+j=strjk+;j+;k=len2count+;i=i+k-1;結束YNYNNY查找第一個字符,如果有第一個字符即p-datai=str0,設計數(shù)器k=0查找這個字符后面的字符與要查找的字符串是否匹配即p-datai+j=strj,如果匹配k+重復第二步,如果k=len2,則查找到,count+;如果沒查找到,重新進行第一步void delstringword(char *s,char *str) /*刪除字符串*s中的字符串*str*/ strpi jsfor(m=0;mi;m+)tmpcount+=sm;for(n=j;nlen;n+)tmpcount+=sn;tmp實現(xiàn)思想:從字符串s中尋找str第一次出現(xiàn)的位置 *p=strstr(s,str);len=strlen(s);i=len-strlen(p)即前i項恰好不含要刪除的字符串,將前i項復制到tmp中j=i+strlen(str) 即要刪除的字符串在i+1和j之間,將j之后的字符串復制到tmp中將tmp賦給串s,返回s六 程序設計思想存儲結構使用線性表,分別用幾個子函數(shù)實現(xiàn)相應的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標點符號。輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出全部字母數(shù)、數(shù)字個數(shù)、空格個數(shù)、文章總字數(shù)(3)輸出刪除某一字符串后的文章七 源程序#include #include /輸入輸出文件流類頭文件 using namespace std; const int N=800; class Text /定義Text類 private: char sN80; char filename30; char str90; int len; void getdata1(); void getdata2(); void getdata(); void show_text(); void count(); void search_str(); void delete_str(); void help(); public: Text() cout -您好,歡迎使用文本編輯程序!-endlendl; cout=endl; cout=endl; void Main_Work(); ; void Text:getdata() int chose; /選擇文本 cout 請選擇文件來源endlendl; cout 1、打開文件endlendl; cout 2、手動輸入endlchose; switch(chose) case 1:getdata1();break; case 2:getdata2();break; void Text:getdata1() cout請輸入文本名:filename; coutendl; FILE *f1;char a;int i=0,j=0; f1=fopen(filename,r); /通過文件名與文件流關聯(lián) cout正在讀取數(shù)據(jù).endlendl; len=0; memset(s,0,sizeof(s); while(a=getc(f1)!=EOF) /從文件逐個讀取字符并傳遞a直到文件結束 if(j=79) si+j=n;j=0; /每行不超過80個字符 if(a!=n)sij+=a; /如果沒有回車就一直傳遞 else si+j=a; /如果遇見回車換行輸入 len=i+1; /計算行數(shù) cout數(shù)據(jù)讀取完畢:endl; void Text:getdata2() /從鍵盤輸入字符 cout請輸入一段字符,以#號結束endl; memset(s,0,sizeof(s); char a;int i=0,j=0; while(a=getchar()!=#) /以#號結束 if(j=79) si+j=n;j=0; if(a!=n)sij+=a; else si+j=a; len=i+1; void Text:show_text() cout文本如下:endl; for(int i=0;ilen;i+) for(int j=0;j80;j+) if(sij!=0) coutsij; coutendl; void Text:help() cout 請選擇操作指令endlendl; cout=endl; cout- count : 分別統(tǒng)計各類字符總數(shù) -endlendl; cout- search: 統(tǒng)計所查字符 -endlendl; cout- delete: 刪除特定字符 -endlendl; cout- help : 查看程序指令集合 -endlendl; cout- return: 返回選擇文件 -endlendl; cout- exit : 退出文本編輯程序 -endlendl; cout=endl; void Text:count() /分別統(tǒng)計各類字符個數(shù) int cc,cp,cn,co,sum; cc=cp=cn=co=sum=0; for(int i=0;ilen;i+) for(int j=0;j=0&sij=A&sij=a&sij=z) cc+; if(sij= ) cp+; if(sij!=0)sum+; /只要字符不為空,就計入總數(shù) cout 文章字符統(tǒng)計如下endlendl; cout 字母個數(shù)為:ccendl; cout 空格個數(shù)為:cpendl; cout 數(shù)字個數(shù)為:cnendl; cout 文章總字數(shù):sumendl; void Text:search_str() char str80,*p;int q,count=0; /定義子串指針 cout請輸入一個字符子串:str; p=str; /從鍵盤輸入子串 for(int i=0;ilen;i+) for(int j=0;j80;j+) q=j; /保存j的初值 while(*p!=0) /匹配直至子串最后一個字符 if(*p=sij)j+;p+; /如果字符匹配,目標串和子串同時右移 else break; /如果字符不匹配跳出循環(huán) if(*p=0)count+; /完全匹配時count加1 p=str; /子串還原 j=q; /還原j的值 coutstr 在文章中的出現(xiàn)次數(shù)為: countendlendl; void Text:delete_str() char str80,*p; int q,m; cout請輸入一個字符子串:str; p=str; for(int i=0;ilen;i+) for(int j=0;j80;j+) q=j; while(*p!=0) if(*p=sij) j+;p+; else break; m=j-q; /刪除子串后移動的距離(子串長度) if(*p=0) for(j=q;sij+m!=0;j+) sij=sij+m; /字符前移 sij=0; /前移之后末尾長度為子串長度的字符設為結束符 j=q-1; /刪除一次子串,目標串前移之后,j+(再次匹配需要-1) else j=q; /不刪除子串,前面的已經(jīng)匹配過,所以不需要-1 p=str; /子串還原 cout刪除字符str后的文本為:endlendl; show_text(); void Text:Main_Work() char order10; getdata(); show_text(); coutendl; help(); coutorder) coutendl; if(strcmp(order, exit) = 0) return; if(strcmp(order, count) = 0) count(); else if(strcmp(order, search) = 0) search_str(); else if(strcmp(order, delete) = 0) delete_str(); else if(strcmp(order, return) = 0) Main_Work(); else if(strcmp(order, help) = 0) help(); else cout指令錯誤,請重新輸入endlendl; cout請輸入指令: ; int main() Text text; text.Main_Work(); return 0; 20八 調試分析1 文本輸出部分正確,后面出現(xiàn)亂碼,查找資料說是沒有對數(shù)組內存初始化,可以通過memset函數(shù)實現(xiàn)。在獲取文本的時候同時對數(shù)組內存初始化,解決問題2 分類統(tǒng)計自負的時候輸出異常,具體是文章字數(shù)sun不正確,仔細檢查是for循環(huán)的過程中,sum每次都自增,沒有設置自增條件,通過對sum加上if條件后解決問題加上if條件后3 刪除子串時如果遇見同一子串連續(xù)出現(xiàn)數(shù)次,只能刪除一半這是因為每次匹配時j的值變化,需要還原,然后j+如果不刪除前面匹配過的直接還原即可,刪除的話后續(xù)子串前移,自增后前移的第一個值不會匹配,通過設計不同的j值還原解決九 測試數(shù)據(jù)讀取文件以及分類統(tǒng)計查詢子串刪除字串十 用戶使用手冊1 嚴蔚敏、吳偉民主編,數(shù)據(jù)結構(C語言版),清華大學出版社,2002。2 殷人昆等著,數(shù)據(jù)結構(C+版),清華大學出版社,2001。3 金遠平著,數(shù)據(jù)結構(C+描述),清華大學出版社,2005。4 許卓群等著,數(shù)據(jù)結構與算法,高等教育出版社,2004。5 Frank M.Carrano等著,數(shù)據(jù)結構與+高級教程,清華大學出版社,2004。6 嚴蔚敏、吳偉民著,數(shù)據(jù)結構習題集(C語言版),清華大學出版社。十一 心得體會本實驗采用鏈式順序表結構實現(xiàn)了文章編輯的基本功能,實驗過程中遇到了很多或大或小的問題,在這些問題的解決過程中,加深了對鏈表的理解,使我對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZRIA 002-2024 工業(yè)巡檢四足機器人通.用技術條件
- T-ZSM 0058-2024“領跑者”評價技術要求 飾面木質墻板
- 二零二五年度林業(yè)林地經(jīng)營權買賣合同
- T-ZJATA 0022-2024 土壤中揮發(fā)性有機物測定用便攜式氣相色譜-質譜聯(lián)用儀
- T-ZJZYC 022-2024 靈芝工廠化生產(chǎn)技術規(guī)程
- 二零二五年度簽約主播與汽車廠商合作直播試駕體驗協(xié)議
- 二零二五年度會展中心物業(yè)管理服務托管協(xié)議
- 二零二五年度新能源項目投資對賭協(xié)議
- 二零二五年度股東清算與清算資產(chǎn)評估及拍賣協(xié)議
- 二零二五年度創(chuàng)新創(chuàng)業(yè)團隊員工合作協(xié)議書
- 2020年礦建監(jiān)理工作總結
- 獸醫(yī)學英語詞匯【參考】
- 浙江省溫州市2024-2025學年高三上學期一模英語試題 含解析
- 《尿11-脫氫血栓烷B2與其他危險因素的交互效應在急性冠脈綜合征患者中的研究》
- 建筑施工安全生產(chǎn)包保責任實施方案
- 《時代與變革?版畫藝術的魅力》教學設計
- 《民法典》醫(yī)療損害責任篇培訓課件
- 咨詢公司項目風險控制方案
- 2024年初一英語閱讀理解專項練習及答案
- 病例報告表(CRF)模板
- 2024年云南昆明市教育體育局直屬學校(單位)選調10人易考易錯模擬試題(共500題)試卷后附參考答案
評論
0/150
提交評論