簡單行編輯器-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì)_第1頁
簡單行編輯器-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì)_第2頁
簡單行編輯器-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì)_第3頁
簡單行編輯器-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì)_第4頁
簡單行編輯器-數(shù)據(jù)結(jié)構(gòu)-課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)中國礦業(yè)大學(xué)徐海學(xué)院計(jì)算機(jī)系軟件認(rèn)知實(shí)踐報(bào)告姓 名: 學(xué) 號(hào): 專 業(yè): 設(shè)計(jì)題目: 簡單行編輯器 指導(dǎo)教師: 2012年12月25目 錄 TOC o 1-3 h z u 013 題目概述在這次課程設(shè)計(jì)中我選的題目是文本編輯,文本編輯幾乎是每個(gè)使用電腦的人都會(huì)遇到的問題,特別是網(wǎng)絡(luò)小說作家們。在文本的編輯中,我們會(huì)時(shí)常遇到文本信息的統(tǒng)計(jì)問題、小型子串的查找問題、子串的查找和刪除問題等。如果靠人自己去觀察和執(zhí)行相關(guān)操作的話,不僅累人,而且很容易出錯(cuò)。而使用計(jì)算機(jī)程序去實(shí)現(xiàn)

2、的話,則會(huì)省力不少,而且相對(duì)來說非常精確。本程序使用了較快速的查找算法,可以大大提高檢索的效率,相信這可一極大的方便用戶用電腦編輯文本文件。第1.1節(jié) 題目要求文章編輯功能:輸入一頁文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個(gè)數(shù)。靜態(tài)存儲(chǔ)一頁文章,每行最多不超過80個(gè)字符,共N行;要求(1)分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù); (3)刪除某一子串,并將后面的字符前移。存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。 輸出形式:(1)分行輸出用戶輸入的各行字符;(

3、2)分4行輸出全部字母數(shù)、數(shù)字個(gè)數(shù)、空格個(gè)數(shù)、文章總字?jǐn)?shù) (3)輸出刪除某一字符串后的文章;實(shí)現(xiàn)功能(1)文章內(nèi)容的輸入:包括字母、標(biāo)點(diǎn)符號(hào)、數(shù)字等; (2)文章內(nèi)容的統(tǒng)計(jì):包括文章中大寫字母、小寫字母、數(shù)字、標(biāo)點(diǎn)符號(hào)、空格以 及文章所有字?jǐn)?shù)的個(gè)數(shù)的統(tǒng)計(jì);(3)文章內(nèi)容的處理:包括對(duì)文章內(nèi)容的查找、刪除以,其中在查找的過程中統(tǒng)計(jì)出該字符或字符串在文章中出現(xiàn)的次數(shù);第1.2節(jié) 主要難點(diǎn)本程序是對(duì)一段英文文章的內(nèi)容進(jìn)行處理,存儲(chǔ)方式采用鏈?zhǔn)酱鎯?chǔ),沒有文件操作,故本程序?qū)ζ湮谋緝?nèi)容的所有操作都是在鏈表中進(jìn)行的。對(duì)于文本的輸入,采用頭插法將文本信息存儲(chǔ)到鏈表已申請(qǐng)好的存儲(chǔ)空間中,在此部分設(shè)計(jì)中最大的問

4、題在于輸入文章過程中輸入的字符數(shù)大于80時(shí)如何換行;對(duì)于文本內(nèi)容的統(tǒng)計(jì),使用循環(huán)對(duì)已存儲(chǔ)的文章進(jìn)行匹配,大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)直接通過比較即可得到,標(biāo)點(diǎn)符號(hào)通過ASC比較即可得到;對(duì)于文本內(nèi)容的處理,查找部分仍是使用循環(huán)對(duì)已存儲(chǔ)的文章進(jìn)行匹配,判斷需要查找的字符或者字符串是否與文章中某部分內(nèi)容相同,如果存在相同的記錄相同的個(gè)數(shù)及位置并輸出個(gè)數(shù)及位置。刪除部分先使用程序的查找功能對(duì)文章中需要?jiǎng)h除的字符或者字符串進(jìn)行查找,然后對(duì)其進(jìn)行刪除。文本編輯的基本內(nèi)容為查看文本文件內(nèi)容,統(tǒng)計(jì)內(nèi)容基本信息,查找子串是否存在及其出現(xiàn)次數(shù),查找并刪除所有的相關(guān)子串并重新輸出文本內(nèi)容等等。系統(tǒng)流程圖

5、數(shù)據(jù)結(jié)構(gòu)和算法定義結(jié)構(gòu)體 struct line,文本行采用順序存儲(chǔ),行與行之間采用鏈?zhǔn)酱鎯?chǔ).2、主要函數(shù):int FindString(LINE * &head,char *str) /*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/求在一行中Str出現(xiàn)的次數(shù)的流程圖:開始count=0;h=0;len1=0; len2=strlen(str);p-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è)字符后面的字符與要查找的字符串是否匹配即

6、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;ndatastrlen(tmp)-1=0除去最后一個(gè)控制符 E。核心代碼分析1.typedef struct line char *data; struct line *next;LINE; /*創(chuàng)建一鏈表,同時(shí)向里面輸入文本數(shù)據(jù)*/2./*統(tǒng)計(jì)字母數(shù)*/int Cou

7、ntLetter(LINE * &head) LINE *p=head; int count=0;do int Len=strlen(p-data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/ for(int i=0;idatai=a&p-dataidatai=A&p-datainext)!=NULL); /*遍歷 鏈表*/return count; /*返回文章的字母總數(shù)*/*統(tǒng)計(jì)數(shù)字?jǐn)?shù)*/int CountNumber(LINE * &head) LINE *p=head; int count=0; do int Len=strlen(p-data); /*計(jì)算當(dāng)前 data 里的數(shù)

8、據(jù)元素的個(gè)數(shù)*/ for(int i=0;idatai=48 & p-datainext)!=NULL); /*遍歷 鏈表*/ return count;/*統(tǒng)計(jì)空格數(shù)*/int CountSpace(LINE * &head) LINE *p=head; int count=0; do int Len=strlen(p-data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/ for(int i=0;idatai=32)count+; /*計(jì)算空格數(shù),空格ASCII碼為32*/ while(p=p-next)!=NULL); /*遍歷 鏈表*/ return count;/*統(tǒng)計(jì)文章的總

9、字?jǐn)?shù)*/int CountAll(LINE * &head) LINE *p=head; /*保存鏈表的首地址*/ int count=0; do /*計(jì)算總字符數(shù)*/ count+=strlen(p-data); while(p=p-next)!=NULL); /*遍歷 鏈表*/ return count;/*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/int FindString(LINE * &head,char *str) LINE *p=head; int count=0; int h=0; int len1=0; /*保存當(dāng)前行的總字符數(shù)*/ int len2=strlen(str); /*待

10、統(tǒng)計(jì)字符串的長度*/ int i,j,k; do len1=strlen(p-data); /*當(dāng)前行的字符數(shù)*/for(i=0;idatai=str0)k=0; for(j=0;jdatai+j=strj) k+;if(k=len2)count+;i=i+k-1; while(p=p-next)!=NULL); /*遍歷 鏈表*/ return count;第5章 復(fù)雜度分析本算法的空間復(fù)雜度很低,空間復(fù)雜度為O(N)。但是本算法的時(shí)間復(fù)雜度比較高,輸出函數(shù)、查找函數(shù)算法時(shí)間復(fù)雜度均為O(N),但是刪除函數(shù)算法的時(shí)間復(fù)雜度較高。我暫時(shí)還問想到時(shí)間復(fù)雜度更小的算法,因此在這里我無法對(duì)該算法進(jìn)行

11、優(yōu)化。第6章 總結(jié)為期一周的課程設(shè)計(jì)結(jié)束了,在這一周里我完成了編寫文本編輯程序的任務(wù)。任務(wù)書上要求是對(duì)輸入的信息進(jìn)行操作,自己開始是不知道該向什么方向去努力,自己應(yīng)該如何去編寫這個(gè)程序,后來通過對(duì)照著任務(wù)書上的要求和到網(wǎng)上查找相關(guān)資料,慢慢找到了感覺。所以自己在整個(gè)課程設(shè)計(jì)的編寫程序過程中遇到的困難及問題都通過查閱資料、向老師提問得以解決。本次課程設(shè)計(jì)自己最大的體會(huì)就是不管寫什么程序,自己首先得對(duì)這個(gè)問題要分析透徹,要知道自己要干什么,然后才能讓自己干什么。通過本次課程設(shè)計(jì),我學(xué)到了很多:增強(qiáng)了查閱相關(guān)參考資料的能力,獨(dú)立分析解決問題的能力;自己的上機(jī)動(dòng)手的能力和對(duì)課程設(shè)計(jì)的理解,得到很多啟示

12、;課程設(shè)計(jì)為我們提供了一個(gè)即動(dòng)手又動(dòng)腦、獨(dú)立實(shí)踐的機(jī)會(huì),將課本上的知識(shí)理論和實(shí)際有機(jī)的結(jié)合起來,鍛煉了我們的分析解決實(shí)際問題的能力。這次課程設(shè)計(jì)使我我對(duì)數(shù)據(jù)邏輯結(jié)構(gòu)的特點(diǎn)和存儲(chǔ)表示方式的有了更深的了解和認(rèn)識(shí),培養(yǎng)了我在具體應(yīng)用中選擇合適的數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu)的能力,同時(shí)也使我認(rèn)識(shí)到自己在學(xué)習(xí)編程方面還有很多的不足。今后我要多讀一些紡織方面的書籍,不能只拘泥于課本上的知識(shí),并注重理論與實(shí)踐的結(jié)合,多上機(jī)練習(xí)編寫程序,提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力,不斷充實(shí)自己,更好的掌握編程思想。參考文獻(xiàn)1 嚴(yán)蔚敏、吳偉民主編,數(shù)據(jù)結(jié)構(gòu)(C語言版),清華大學(xué)出版社,2002。2 殷人昆等著,數(shù)據(jù)結(jié)構(gòu)(C+

13、版),清華大學(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é)出版社。附錄一:源代碼:#include#include #include /*文本每行以字符串形式存儲(chǔ),行與行之間以鏈表存儲(chǔ)*/typedef struct line char *data; struct line *next;LINE; /*創(chuàng)建一鏈表,同時(shí)向里面輸入文本數(shù)據(jù)*/void Crea

14、te(LINE * &head) printf (請(qǐng)輸入一頁文章,以Ctrl+E(E)為結(jié)尾(每行最多輸入80字符!):n);LINE *p=new LINE; /*首先為鏈表 建立一個(gè)附加表頭結(jié)點(diǎn)*/ head=p; /*將p付給 表頭指針*/ char tmp100; while(1) gets(tmp); /*輸入字符串!*/ if(strlen(tmp)80) printf(每行最多輸入80字符); break; if(tmp0=5)break; /*如果發(fā)現(xiàn)輸入 E,則退出輸入*/ p=p-next=new LINE; p-data=new charstrlen(tmp)+1; /*

15、為結(jié)點(diǎn)分配空間 */ strcpy(p-data,tmp); if(tmpstrlen(tmp)-1=5) /*除去最后一個(gè)控制符 E */ p-datastrlen(tmp)-1=0; break; p-next=NULL; /*最后的一個(gè)指針為空 */ head=head-next;/*統(tǒng)計(jì)字母數(shù)*/int CountLetter(LINE * &head) LINE *p=head; int count=0;do int Len=strlen(p-data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/ for(int i=0;idatai=a&p-dataidatai=A&p-da

16、tainext)!=NULL); /*遍歷 鏈表*/return count; /*返回文章的字母總數(shù)*/*統(tǒng)計(jì)數(shù)字?jǐn)?shù)*/int CountNumber(LINE * &head) LINE *p=head; int count=0; do int Len=strlen(p-data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/ for(int i=0;idatai=48 & p-datainext)!=NULL); /*遍歷 鏈表*/ return count;/*統(tǒng)計(jì)空格數(shù)*/int CountSpace(LINE * &head) LINE *p=head; int count=0

17、; do int Len=strlen(p-data); /*計(jì)算當(dāng)前 data 里的數(shù)據(jù)元素的個(gè)數(shù)*/ for(int i=0;idatai=32)count+; /*計(jì)算空格數(shù),空格ASCII碼為32*/ while(p=p-next)!=NULL); /*遍歷 鏈表*/ return count;/*統(tǒng)計(jì)文章的總字?jǐn)?shù)*/int CountAll(LINE * &head) LINE *p=head; /*保存鏈表的首地址*/ int count=0; do /*計(jì)算總字符數(shù)*/ count+=strlen(p-data); while(p=p-next)!=NULL); /*遍歷 鏈表*

18、/ return count;/*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/int FindString(LINE * &head,char *str) LINE *p=head; int count=0; int h=0; int len1=0; /*保存當(dāng)前行的總字符數(shù)*/ int len2=strlen(str); /*待統(tǒng)計(jì)字符串的長度*/ int i,j,k; do len1=strlen(p-data); /*當(dāng)前行的字符數(shù)*/for(i=0;idatai=str0)k=0; for(j=0;jdatai+j=strj) k+;if(k=len2)count+;i=i+k-1; while(p=p-next)!=NULL); /*遍歷 鏈表*/ return count;/*刪除指定的字符串*/void delstringword(char *s,char *str) /* *s為輸入的字符串,*str為將要?jiǎng)h除的字符*/char *p=strstr(s,str); /*從字符串s中尋找str第一次出現(xiàn)的位置*/ char tmp80; int len=strlen(s); int i=len-strlen(p); int j=i+strlen(str); int count=0; for(int m=0;mi;m+)tmpcount+=sm; for(int n=j;nd

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論