




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、海南大學(xué)信息科學(xué)技術(shù)學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 設(shè)計題目:簡易文本編輯器專業(yè)班級:通信三班姓 名:代亮亮學(xué) 號:指導(dǎo)教師:吳哲暉目 錄一、 需求分析 二、 設(shè)計要求 三、 概要設(shè)計 四、 詳細(xì)設(shè)計 五、 運行結(jié)果 六、 心得體會 七、 參考文獻 1.需求分析:在當(dāng)今的消息快速發(fā)展的年代,利用網(wǎng)絡(luò)來傳遞消息已經(jīng)是消息傳播的唯一途徑,而對一個文本的修改是我們每天都在做的事,在這廣域的消息里快速的提取出對自己有用的部分,因此我設(shè)計了一個簡易的文本編輯器,能夠提供查找功能,替換功能。2.概要設(shè)計: 為了更有效的進行查找功能,該編輯器運用了鏈?zhǔn)酱鎯?,該存儲結(jié)構(gòu)的特點是邏輯關(guān)系相鄰的兩個元素在物理位置上并不
2、相鄰,并將輸入的文本分為一個一個的鏈塊,這樣,就能大大加快了查找的元素的速度。(1) 輸入并顯示文本信息。(2) 在文本中對某些元素進行查找,(3) 對查找的元素替換。(4) 顯示替換元素的位置。(5) 顯示元素替換后的文本。(6) 退出。3.詳細(xì)設(shè)計:3. 1 程序模塊說明3. 1.1 程序模塊為了更方便地完成字符串的查找,此程序采用串的塊鏈?zhǔn)酱鎯Y(jié)構(gòu)存儲方式。通過主模塊調(diào)用四個小模塊完成文本編輯的各種功能。用戶可在主模塊上循環(huán)對程序進行操作。主模塊查找模塊替換模塊編輯文本信息退出模塊3.1.2 模塊功能說明1.主模塊:用戶可編輯任一文檔,輸入要在文本中查找的信息。初始化一個字符串,并用串的
3、塊鏈?zhǔn)酱鎯Y(jié)構(gòu)存儲。2. 編輯文本信息:將用戶編輯的文本信息分行輸出來,并輸出字符串的長度和行數(shù)。3.查找模塊:遍歷整個文本,查找字符串在串中的位置,并輸出其所在位置,直到遍歷完整個文本結(jié)束。4.替換模塊:先查找你要替換的字符所在位置,然后根據(jù)用戶選擇是否替換該字符。5.退出模塊:退出程序,等待用戶下次重行運行該程序。3.2程序流程圖說明3.2.1 主函數(shù)流程圖開始 輸入命令命令替換退出查找結(jié)束 圖2.1.主程序流程圖用戶可根據(jù)此函數(shù)輸入想要進行的操作來實現(xiàn)其相應(yīng)的編輯文本信息、查找字符在文本中的所在位置、替換文本中的字符串及查看當(dāng)前文本的字符數(shù)以及行數(shù)的信息等一系列功能。開始3.2.2 顯示
4、模塊流程圖輸出文檔的長度和行數(shù)并輸出字符串統(tǒng)計文檔的長度和行數(shù)初始化該文檔用塊鏈儲存結(jié)構(gòu)儲存輸入一個新的文檔結(jié)束圖2.2 顯示模塊流程圖此模塊主要實現(xiàn)用戶所編輯的文本信息的行數(shù)和字符總個數(shù),以及輸出文本的字符信息。顯示出用戶所編輯的文本信息,并輸出到屏幕上,為滿足用戶需求,此模塊可循環(huán)操作。3.2.3 查找模塊流程圖 圖2.3 查找流程圖此模塊主要是完成字符串的查找以及替換文本中的字符信息等功能。查找字符串主要是通過將所查找的字符串和主串開始從第一個字符開始比較,如果相同,比較下一個字符,否則將指向當(dāng)前字符串中的字符指針向前移動已比較字符個數(shù)個單位,并且在想后移一個字符,然后再從頭開始和和所查
5、找字符穿一一比較。查找成功則返回字符所在位置并輸出,接著繼續(xù)進行下一輪查找,一直循環(huán)到將文本中信息讀完為止,詳見流程圖2.3。3.2.4 替換模塊流程圖. 圖2.4. 替換流程圖此模塊主要是完成字符串的查找以及替換文本中的字符信息等功能。查找字符串主要是通過將所查找的字符串和主串開始從第一個字符開始比較,如果相同,比較下一個字符,否則將指向當(dāng)前字符串中的字符指針向前移動已比較字符個數(shù)個單位,并且在想后移一個字符,然后再從頭開始和和所查找字符穿一一比較。查找成功則返回字符所在位置并輸出,接著繼續(xù)進行下一輪查找,一直循環(huán)到將文本中信息讀完為止。替換功能是在查找的基礎(chǔ)上進行的,即也就是先查找到要替換
6、的詞的位置,然后根據(jù)用戶選擇在此位置是否替換,同樣也是一直循環(huán)到讀完整個文本信息為止。詳見流程圖2。4。3.2.5 將文本初始化 圖2.5 初始化文本信息將文本信息初始化到用塊鏈?zhǔn)酱鎯Φ拇? 函數(shù)的描述4.1 串的初始化初始化一個空串,然后將輸入的文本信息存儲到此串中,因為這是采用的塊鏈?zhǔn)酱鎯?,用戶可以自定義行的大小即一個節(jié)點存儲的字符串個數(shù),所申請的總的節(jié)點數(shù)也就是字符的行數(shù)。4.2 查找函數(shù)查找字符串主要是通過將所查找的字符串和主串開始從第一個字符開始比較,如果相同,用for循環(huán)比較下一個字符,不同則將指向當(dāng)前字符串中的字符指針向前移動已比較字符個數(shù)個單位,并且再向后移一個字符,然后再從
7、頭開始和和所查找字符穿一一比較。查找成功則返回字符所在位置并輸出,接著繼續(xù)進行下一輪查找,一直循環(huán)到將文本中信息讀完為止。4.3 替換函數(shù)替換功能是在查找的基礎(chǔ)上進行的,即也就是先查找到要替換的詞的位置,然后根據(jù)用戶選擇在此位置是否替換,若需替換,則進入for循環(huán)完成替換,然后再通過比較查找到下一個需替換的位置,同樣也是一直循環(huán)到讀完整個文本信息為止。4.4 串的塊鏈存儲采用串的塊鏈?zhǔn)酱鎯Φ膬?yōu)點是用戶可根據(jù)自已的實際需要來定義每個節(jié)點的大小,這樣可減少空間浪費,除此之外,鏈?zhǔn)酱鎯€方便查找。5 程序測試和運行的結(jié)果為方便查閱,所以選一串比較短的字符串為例,以英文字符“ABCDEFGHIJKLM
8、N1234567”為例,來實現(xiàn)下面的所有功能5.1 初始化一個串5.1.1首先用戶可輸入用戶所需要的文本信息,如“ABCDEFGHIJKLMN1234567”程序開始運行界面如圖4.1.1所示。5.1.2初始化“ABCDEFGHIJKLMN1234567”后,結(jié)果如下圖4.1.2所示,分行輸出文本的字符信息以及文本長度和行數(shù)。初始化一字符串5.2 查找與替換字符串.編輯完文本后,用戶可自定義查找和替換字符,選擇查找和替換選項(即第二個選項),;如下圖4.2.1所示。根據(jù)說明輸入指令2進行查找5.2.2輸入你要查找的字符串,以回車結(jié)束。如圖4.2.2所示。根據(jù)提示,輸入你要查找的字符,如“D”查
9、找字符串5.2.3輸入你需要替換后的的字符,如“L”5.2.4查找出所查找詞在串中的第一個位置,輸出該位置并彈出指令用戶是否需要替換此位置的詞.5.2.5根據(jù)用戶選擇,如輸入Y;則替換掉該位置的詞并接著查找下一個所查找字符的所在位置或查找結(jié)束。5.2.6若用戶不需要替換該位置的字符,輸入“N”程序?qū)⑻^該位置替換直接進入下一輪查找。回到主程序,查找下一個字符,或繼續(xù)進行下一輪操作。6.設(shè)計心得體會: 在這學(xué)期里我們學(xué)習(xí)了數(shù)據(jù)結(jié)構(gòu)這門課程,由于這次課程設(shè)計沒有具體的實驗題目要求,大家自由發(fā)揮,經(jīng)過在網(wǎng)上查找資料和自己在本學(xué)期的學(xué)習(xí)情況,我選擇設(shè)計一個簡易的文本編輯器。通過這次課程設(shè)計我認(rèn)識到了知
10、識的學(xué)習(xí)不能只局限于課本知識,更使我明白了編碼能力和實踐能力的重要性,而我們以后的編碼將會有更高的要求,將會有更多的設(shè)計要求,不能僅僅是從自身的考慮出發(fā),這將大大提高編碼的困難程度。而通過這次課程設(shè)計,也讓我更加的熟練的掌握了Visual C 的環(huán)境和語法,熟悉了其結(jié)構(gòu),提高了自身的分析能力和編碼能力。同時,通過這次課程設(shè)計,我也對大一學(xué)習(xí)的C語言進行了一次復(fù)習(xí),再次復(fù)習(xí)了C語言的編程語法。在編碼與調(diào)試過程中,我也遇到了很多的問題,有很多問題也是由于自己的粗心而使調(diào)試的時候花費了很多不必要的世界,例如有的地方少了分號,冒號,有的地方忘記了定義,有時候即使沒有出現(xiàn)錯誤但是運行結(jié)果是錯誤的,通過與
11、同學(xué)的交流溝通,和在書上查看相關(guān)資料,最終解決了這些問題??傊ㄟ^這次課程設(shè)計不僅鍛煉了我的實際操作能力,而且培養(yǎng)了嚴(yán)密的思維能力和嚴(yán)謹(jǐn)?shù)膽B(tài)度,本次課程設(shè)計讓我受益匪淺,而且加深了我對編程的興趣。參考文獻1.王昆侖、李紅。數(shù)據(jù)結(jié)構(gòu)與算法。北京:中國鐵道出版社。 附 錄(關(guān)鍵部分程序清單)查找和替換函數(shù)void chazhao(LString *T,char *chars,char *chars1)/所查找字符和替換后的字符Chunk *p,*q;int m=0,c=0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;char u;p=q=T-head;while(1)if(c=
12、CHUNKSIZE)q=q-next;a+;c=0;for(x=0;q-chc=charsm;x+)m+;c+;if(x=0)b=a;d=c-1;if(c=CHUNKSIZE)q=q-next;c=0;if(charsm=0)/字符查完printf(所查字符所在行位置是%d,第%d個位置開始n,b,d+1); printf(若需替換該字符,輸入Y,否則輸入Nn); scanf(%c,&u);fflush(stdin); if(u!=N)p=T-head; a=b;c=d; for(a1=1;a1next;q=p; for(;c1next; c=0; q-chc=chars1c2;c2+;c+;
13、c2=0;c1=0; StrPrint(*T);/替換完畢 c=d;a=b;if(!*(q-ch+c+1+m)/串查完/ printf(查找完成,已無匹配字符n);break;elsep=T-head;for(a1=1;a1next;q=p;c=c+1;m=0;生成一個其值等于chars的串T,成功返回1,否則返回0 int StrAssign(LString *T,char *chars)int i,j,k,l,m=0;Chunk *p,*q;i=strlen(chars); / i為串的長度 if(!i) return 0;(*T).curlen=i;j=i/CHUNKSIZE;/ j為塊
14、鏈的結(jié)點數(shù),塊的個數(shù) ,即行數(shù)if(i%CHUNKSIZE0)/不足一個塊的,當(dāng)成一個塊即塊數(shù)加1j+;printf(長度是%dn行數(shù)是%dn,i,j);for(k=0;knext=p; q=p; for(l=0;lchl=charsm;m+; if(!*chars) (*T).tail=q;q-next=NULL;for(;lch+l)=blank;return 1;輸出字符串Tvoid StrPrint(LString T)int i=0,j;Chunk *h;h=T.head;while(iT.curlen)for(j=0;jch+j)!=blank) / 不是填補空余的字符 print
15、f(%c,*(h-ch+j);i+;printf(n);h=h-next;printf(n);源代碼#include #include #include #include #include #define CHUNKSIZE 4 #define n 26char blank = #;/ 全局變量,用于填補空余 typedef struct Chunkchar chCHUNKSIZE;struct Chunk *next;Chunk;typedef structChunk *head,*tail; int curlen;LString;void InitString(LString *T)/ 初
16、始化(產(chǎn)生空串)字符串T。(*T).curlen=0;(*T).head=NULL;(*T).tail=NULL;int StrAssign(LString *T,char *chars)/ 生成一個其值等于chars的串T, 成功返回1,否則返回0 int i,j,k,l;Chunk *p,*q;i=strlen(chars); / i為串的長度 if(!i|strchr(chars,blank) / 串長為0或chars中包含填補空余的字符 return 0;(*T).curlen=i;j=i/CHUNKSIZE;/ j為塊鏈的結(jié)點數(shù),塊的個數(shù) if(i%CHUNKSIZE)/不足一個塊的
17、,當(dāng)成一個塊即塊數(shù)加1j+;printf(長度是%dn行數(shù)是%dn,i,j);for(k=0;knext=p;q=p;for(l=0;lch+l)=*chars+;if(!*chars) / 最后一個鏈塊 (*T).tail=q;q-next=NULL;for(;lch+l)=blank;return 1;int StrEmpty(LString S)if(S.curlen) return 0;elsereturn 1;void StrPrint(LString T)/ 輸出字符串Tint i=0,j;Chunk *h;h=T.head;while(iT.curlen)for(j=0;jch+
18、j)!=blank) / 不是填補空余的字符 printf(%c,*(h-ch+j);i+;printf(n);h=h-next;printf(n);void chazhao(LString *T,char *chars,char *chars1)/查找和替換函數(shù)/Chunk *p,*q;int m=0,c=0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;char u;p=q=T-head;while(1)if(c=CHUNKSIZE)q=q-next;a+;c=0;for(x=0;q-chc=charsm;x+)m+;c+;if(x=0)b=a;d=c-1;if(c=CHU
19、NKSIZE)q=q-next;c=0;if(charsm=0)/字符查完printf(所查字符所在行位置是%d,第%d個位置開始n,b,d+1); printf(若需替換該字符,輸入Y,否則輸入Nn); scanf(%c,&u);fflush(stdin); if(u!=N)p=T-head; a=b;c=d; for(a1=1;a1next;q=p; for(;c1next; c=0; q-chc=chars1c2;c2+;c+;c2=0;c1=0; StrPrint(*T);/替換完畢 c=d;a=b;if(!*(q-ch+c+1+m)/串查完/ printf(查找完成,已無匹配字符n);break;elsep=T-head;for(a1=1;a1next;q=p;c=c+1;m=0;void main()char s1n,s2n,s3n;/char *s3=22,*s2=aa;LString t1;int k,meum=0,L,h;printf(t=說明:首先連續(xù)輸入幾個字符初始化串,以回車結(jié)束.= =n); printf(t=1:查看串的信息
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 影響愈合的生物學(xué)因素
- 企業(yè)培訓(xùn)課件分享模板
- 嬰幼兒保育職業(yè)素養(yǎng)考核試題及答案
- 英語閱讀難句分析之定語從句
- 城市綜合體餐飲區(qū)承包經(jīng)營合同
- 采石場礦山環(huán)境保護與勞務(wù)合作合同
- 國際化產(chǎn)業(yè)園廠房租賃合作協(xié)議
- 財務(wù)公司財務(wù)軟件保密及用戶隱私保護協(xié)議
- 防用房建設(shè)方案
- 早餐店標(biāo)準(zhǔn)化經(jīng)營承包合同
- 急性肺栓塞課件
- 高校中外合作辦學(xué)人才培養(yǎng)機制
- 《肢體殘疾評定》課件
- 停車場數(shù)據(jù)分析與管理
- 全等三角形經(jīng)典輔助線做法匯總
- 客運列車保潔作業(yè)服務(wù)方案
- 2023年廣東省廣州市白云區(qū)委政法委招聘1人筆試參考題庫(共500題)答案詳解版
- 心理治療師(初級)必刷必練題庫(600題)
- 廣東省廣州市2024屆高三上學(xué)期8月階段訓(xùn)練數(shù)學(xué)試題
- 電離方程式的書寫高一上學(xué)期化學(xué)人教版(2019)必修第一冊
- 哈薩克斯坦勞動法中文版
評論
0/150
提交評論