




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
文章編輯數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)報(bào)告題 目: 簡單編譯器的實(shí)現(xiàn) 學(xué) 院 信息科學(xué)與工程學(xué)院學(xué) 生 姓 名 尹婷 班 級(jí) 學(xué) 號(hào) 0909101820 指 導(dǎo) 教 師 林立新 日 期 2012.7.03 一、問題描述編寫一個(gè)簡單的文章編輯程序,具體功能如下:1.用戶可按行輸入字符串到程序,每行不超過80字2.分別統(tǒng)計(jì)出其中每行的英文字母數(shù),數(shù)字?jǐn)?shù),空格數(shù),以及整篇文章的總字?jǐn)?shù)3.統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù)并輸出該次數(shù)4.可刪除某一字串,刪除后程序自動(dòng)將后面的字符前移程序要求:1.存儲(chǔ)結(jié)構(gòu)使用線性表2.分別使用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)功能二、基本要求模塊功能需求 (1)輸入模塊:用戶可在文本輸入框中輸入任意字符,最多輸入80個(gè)字符,輸入后保存在程序變量中.(2)編輯模塊:用戶可點(diǎn)擊刪除按鈕,刪除某一行或行中的任何字串. (3)統(tǒng)計(jì)模塊:程序會(huì)根據(jù)用戶需求統(tǒng)計(jì)某一行的英文字母數(shù)、數(shù)字?jǐn)?shù)、空格數(shù),并自動(dòng)顯示整篇文章的總字?jǐn)?shù)(4)顯示輸出模塊:程序會(huì)將用戶輸入的文章及統(tǒng)計(jì)結(jié)果合理清晰的顯示在窗口中三、數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)1、定義結(jié)構(gòu)體 struct line,文本行采用順序存儲(chǔ),行與行之間采用鏈四 軟件模塊結(jié)構(gòu)圖開始文章輸入、瀏覽、統(tǒng)計(jì)串、統(tǒng)計(jì)及刪除的詳細(xì)流程如下圖所示:選定選項(xiàng)一2211111111111111顯示文本信息且換行輸入文本信息(datai=str0i+k=0;j=0;p-datai+j=strjk+;j+;k=len2count+;i=i+k-1;結(jié)束YNYNNY查找第一個(gè)字符,如果有第一個(gè)字符即p-datai=str0,設(shè)計(jì)數(shù)器k=0查找這個(gè)字符后面的字符與要查找的字符串是否匹配即p-datai+j=strj,如果匹配k+重復(fù)第二步,如果k=len2,則查找到,count+;如果沒查找到,重新進(jìn)行第一步void delstringword(char *s,char *str) /*刪除字符串*s中的字符串*str*/ strpi jsfor(m=0;mi;m+)tmpcount+=sm;for(n=j;nlen;n+)tmpcount+=sn;tmp實(shí)現(xiàn)思想:從字符串s中尋找str第一次出現(xiàn)的位置 *p=strstr(s,str);len=strlen(s);i=len-strlen(p)即前i項(xiàng)恰好不含要?jiǎng)h除的字符串,將前i項(xiàng)復(fù)制到tmp中j=i+strlen(str) 即要?jiǎng)h除的字符串在i+1和j之間,將j之后的字符串復(fù)制到tmp中將tmp賦給串s,返回s六 程序設(shè)計(jì)思想存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出全部字母數(shù)、數(shù)字個(gè)數(shù)、空格個(gè)數(shù)、文章總字?jǐn)?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、手動(dòng)輸入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); /通過文件名與文件流關(guān)聯(lián) cout正在讀取數(shù)據(jù).endlendl; len=0; memset(s,0,sizeof(s); while(a=getc(f1)!=EOF) /從文件逐個(gè)讀取字符并傳遞a直到文件結(jié)束 if(j=79) si+j=n;j=0; /每行不超過80個(gè)字符 if(a!=n)sij+=a; /如果沒有回車就一直傳遞 else si+j=a; /如果遇見回車換行輸入 len=i+1; /計(jì)算行數(shù) cout數(shù)據(jù)讀取完畢:endl; void Text:getdata2() /從鍵盤輸入字符 cout請輸入一段字符,以#號(hào)結(jié)束endl; memset(s,0,sizeof(s); char a;int i=0,j=0; while(a=getchar()!=#) /以#號(hào)結(jié)束 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)計(jì)各類字符總數(shù) -endlendl; cout- search: 統(tǒng)計(jì)所查字符 -endlendl; cout- delete: 刪除特定字符 -endlendl; cout- help : 查看程序指令集合 -endlendl; cout- return: 返回選擇文件 -endlendl; cout- exit : 退出文本編輯程序 -endlendl; cout=endl; void Text:count() /分別統(tǒng)計(jì)各類字符個(gè)數(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+; /只要字符不為空,就計(jì)入總數(shù) cout 文章字符統(tǒng)計(jì)如下endlendl; cout 字母個(gè)數(shù)為:ccendl; cout 空格個(gè)數(shù)為:cpendl; cout 數(shù)字個(gè)數(shù)為:cnendl; cout 文章總字?jǐn)?shù):sumendl; void Text:search_str() char str80,*p;int q,count=0; /定義子串指針 cout請輸入一個(gè)字符子串:str; p=str; /從鍵盤輸入子串 for(int i=0;ilen;i+) for(int j=0;j80;j+) q=j; /保存j的初值 while(*p!=0) /匹配直至子串最后一個(gè)字符 if(*p=sij)j+;p+; /如果字符匹配,目標(biāo)串和子串同時(shí)右移 else break; /如果字符不匹配跳出循環(huán) if(*p=0)count+; /完全匹配時(shí)count加1 p=str; /子串還原 j=q; /還原j的值 coutstr 在文章中的出現(xiàn)次數(shù)為: countendlendl; void Text:delete_str() char str80,*p; int q,m; cout請輸入一個(gè)字符子串: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; /刪除子串后移動(dòng)的距離(子串長度) if(*p=0) for(j=q;sij+m!=0;j+) sij=sij+m; /字符前移 sij=0; /前移之后末尾長度為子串長度的字符設(shè)為結(jié)束符 j=q-1; /刪除一次子串,目標(biāo)串前移之后,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指令錯(cuò)誤,請重新輸入endlendl; cout請輸入指令: ; int main() Text text; text.Main_Work(); return 0; 20八 調(diào)試分析1 文本輸出部分正確,后面出現(xiàn)亂碼,查找資料說是沒有對數(shù)組內(nèi)存初始化,可以通過memset函數(shù)實(shí)現(xiàn)。在獲取文本的時(shí)候同時(shí)對數(shù)組內(nèi)存初始化,解決問題2 分類統(tǒng)計(jì)自負(fù)的時(shí)候輸出異常,具體是文章字?jǐn)?shù)sun不正確,仔細(xì)檢查是for循環(huán)的過程中,sum每次都自增,沒有設(shè)置自增條件,通過對sum加上if條件后解決問題加上if條件后3 刪除子串時(shí)如果遇見同一子串連續(xù)出現(xiàn)數(shù)次,只能刪除一半這是因?yàn)槊看纹ヅ鋾r(shí)j的值變化,需要還原,然后j+如果不刪除前面匹配過的直接還原即可,刪除的話后續(xù)子串前移,自增后前移的第一個(gè)值不會(huì)匹配,通過設(shè)計(jì)不同的j值還原解決九 測試數(shù)據(jù)讀取文件以及分類統(tǒng)計(jì)查詢子串刪除字串十 用戶使用手冊1 嚴(yán)蔚敏、吳偉民主編,數(shù)據(jù)結(jié)構(gòu)(C語言版),清華大學(xué)出版社,2002。2 殷人昆等著,數(shù)據(jù)結(jié)構(gòu)(C+版),清華大學(xué)出版社,2001。3 金遠(yuǎn)平著,數(shù)據(jù)結(jié)構(gòu)(C+描述),清華大學(xué)出版社,2005。4 許卓群等著,數(shù)據(jù)結(jié)構(gòu)與算法,高等教育出版社,2004。5 Frank M.Carrano等著,數(shù)據(jù)結(jié)構(gòu)與+高級(jí)教程,清華大學(xué)出版社,2004。6 嚴(yán)蔚敏、吳偉民著,數(shù)據(jù)結(jié)構(gòu)習(xí)題集(C語言版),清華大學(xué)出版社。十一 心得體會(huì)本實(shí)驗(yàn)采用鏈?zhǔn)巾樞虮斫Y(jié)構(gòu)實(shí)現(xiàn)了文章編輯的基本功能,實(shí)驗(yàn)過程中遇到了很多或大或小的問題,在這些問題的解決過程中,加深了對鏈表的理解,使我對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)園區(qū)規(guī)劃設(shè)計(jì)思路
- 工業(yè)排污處理的智能化改造與物聯(lián)網(wǎng)
- 工業(yè)安全與防護(hù)在智能車間的實(shí)施要點(diǎn)
- 工業(yè)機(jī)器人與節(jié)能生產(chǎn)技術(shù)探討
- 工作與生活融合的未來趨勢
- 38所項(xiàng)目管理制度
- 532停線管理制度
- 標(biāo)準(zhǔn)公廁安全管理制度
- 樹脂產(chǎn)品車間管理制度
- 校區(qū)日常衛(wèi)生管理制度
- T/CAQI 96-2019產(chǎn)品質(zhì)量鑒定程序規(guī)范總則
- 育嬰師上戶合同范本
- 俱樂部授權(quán)協(xié)議書
- 探析3-6年級(jí)小學(xué)生校園排斥:現(xiàn)狀、歸因與防范路徑
- 人教版(2024)七年級(jí)地理下學(xué)期期末達(dá)標(biāo)測試卷A卷(含解析)
- 《插花藝術(shù)》教材任務(wù)-項(xiàng)目三 任務(wù)二切花裝飾設(shè)計(jì)
- 公共組織績效評估-形考任務(wù)三(占10%)-國開(ZJ)-參考資料
- 2025年廣東高中學(xué)業(yè)水平合格性考試化學(xué)試卷試題(含答案解析)
- 2025年突發(fā)流行性傳染性疾病應(yīng)急演練方案及總結(jié)
- 安能快遞加盟合同協(xié)議
- 2024年大學(xué)生就業(yè)力調(diào)研報(bào)告-智聯(lián)招聘-202405
評論
0/150
提交評論