數據結構課程設計文本編輯器_第1頁
數據結構課程設計文本編輯器_第2頁
數據結構課程設計文本編輯器_第3頁
數據結構課程設計文本編輯器_第4頁
數據結構課程設計文本編輯器_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

課山東理程工大學計設算機學計院(數據結構)班級姓名學號指導教師計科0906趙利強0911011192孫守卿二O 年一月二十日課程設計任務書及成績評定課題名稱 文本編輯 I、題目的目的和要求:1、設計目的鞏固和加深對數據結構的理解,通過上機實驗、調試程序,加深對課本知識的理解最終使學生能夠熟練應用數據結構的知識寫程序。(1)通過本課程的學習,能熟練掌握幾種基本數據結構的基本操作。(2)能針對給定題目,選擇相應的數據結構,分析并設計算法,進而給出問題的正確求解過程并編寫代碼實現(xiàn)。2、設計題目要求:文章編輯功能:輸入一頁文字,程序可以統(tǒng)計出文字、數字、空格的個數。靜態(tài)存儲一頁文章,每行最多不超過80個字符,共N行;要求(1)分別統(tǒng)計出其中英文字母數和空格數及整篇文章總字數;(2)統(tǒng)計某一字符串在文章中出現(xiàn)的次數,并輸出該次數;(3)刪除某一子串,并將后面的字符前移。存儲結構使用線性表,分別用幾個子函數實現(xiàn)相應的功能;輸入數據的形式和范圍:可以輸入大寫、小寫的英文字母、任何數字及標點符號。輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出"全部字母數"、"數字個數"、"空格個數"、"文章總字數"(3)輸出刪除某一字符串后的文章;II、設計進度及完成情況日期內 谷1.10-1.11選取參考書,查閱有關文獻資料,完成資料搜集和系統(tǒng)分析工作。1.12?1.14創(chuàng)建相關數據結構,錄入源程序。1.17?1.19調試程序并記錄調試中的問題,初步完成課程設計報告。1.20?1.21上交課程設計報告打印版并進行課程設計答辯,要求每個同學針對自己的設計回答指導教師3-4個問題??己私Y束后將課程設計報告和源程序的電子版交班長統(tǒng)刻光盤上交???、主要參考文獻及資料[1]嚴蔚敏數據結構(C語言版)清華大學出版社1999嚴蔚敏數據結構題集(C語言版)清華大學出版社1999譚浩強C語言程序設計清華大學出版社與所用編程環(huán)境相配套的C語言或C++相關的資料W、成績評定:設計成績: (教師填寫)指導老師: (簽字)二o—年一月二十目錄第一章概述……………1第二章系統(tǒng)分析………2第三章概要設計………第四章詳細設計………第五章運行與測試第六章總結與心得參考文獻……………第一章概述在這次課程設計中我選的題目是文本編輯,文本編輯幾乎是每個使用電腦的人都會遇到的問題,特別是網絡小說作家們。在文本的編輯中,我們會時常遇到文本信息的統(tǒng)計問題、小型子串的查找問題、子串的查找和刪除問題等。如果靠人自己去觀察和執(zhí)行相關操作的話,不僅累人,而且很容易出錯。而使用計算機程序去實現(xiàn)的話,則會省力不少,而且相對來說非常精確。本程序使用了較快速的查找算法(KMP),可以大大提高檢索的效率,相信這可一極大的方便用戶用電腦編輯文本文件。第二章系統(tǒng)分析1.文本編輯的基本內容為查看文本文件內容,統(tǒng)計內容基本信息,查找子串是否存在及其出現(xiàn)次數,查找并刪除所有的相關子串并重新輸出文本內容等等。2.文本編輯所需的數據相對簡單,所以本程序僅需要使用一個文本數據文件,當然該文本文件需要和本程序在同一目錄下才行。3.本程序是在終端下運行的程序,頁面簡潔清晰,并配有豐富的提示,即使是在終端下,其人性化依舊,對于喜歡用終端命令提示符的用戶來說在編輯時會感到很愜意,對于習慣窗口形式的用戶來說其人性化提示也能使用戶盡快適應工作環(huán)境。4.程序執(zhí)行時的命令:既然是終端了,那么程序執(zhí)行時肯定是使用命令來進行操作了。雖然沒有窗口那樣直觀,但使用卻非常簡單、準確,用戶不用擔心忘記指令,隨時可以調用help指令來查看相關命令。5.測試數據。共有3組測試數據可供測試,小、大型數據及邊界數據都有。第三章概要設計1、數據結構的設計對于文本編輯來說,數據結構相對簡單,使用一個有較大最大長度的順序表即可,在程序中可采用一維數組來實現(xiàn)。使用數組表示的順序表來存儲文本具有簡潔、訪問方便輸出方便等特點。2、算法的設計程序的設計總體上可分為8個模塊,封裝在File類內。第1個模塊是數據區(qū),即程序運行需要使用的數據、文件流等。第2個模塊是準備部分,即程序剛開始時應輸出的信息。這里使用接口函數voidFile::Getready()實現(xiàn),偽代碼如下:voidFile::Getready(){cout<<〃相關信息及注意事項..〃<<endl;cout<<〃相關信息及注意事項..〃<<endl;}第3個模塊是數據讀取部分,即從文件中獲得所需文本信息。使用接口函數voidFile::Getdata()實現(xiàn),偽代碼如下:voidFile::Getdata(){cin>>filename;fin.open(filename);cout<<〃正在讀取數據....〃<<endl;len=0;while(fin.getline(text,81,'\n')){strcat(s,text);len+=strlen(text);s[len]='\n';s[++len]='\0';}cout<〈"數據初始化完畢..."<<endl<<endl;}第4個模塊是輸出文本內容部分,使用接口函數voidFile::Show_text()實現(xiàn)。偽代碼入下:voidFile::Show_text(){cout<〈"您的輸入文件內容如下:"<<endl<<endl;cout<〈"數據區(qū)線性表存儲的文本內容"<<endl<<endl;}第5個模塊是幫助命令模塊部分,調用該模塊可以在終端顯示程序執(zhí)行時用戶可調用的所有指令,以方便用戶記憶和使用。該部分使用接口函數voidFile::Help()實現(xiàn),偽代碼如下:voidFile::Help(){cout<〈"您可以使用以下命令"<<endl<<endl;cout<<"指令1功能及其使用方法"<<endl<<endl;cout<<"指令2功能及其使用方法"<<endl<<endl;cout<<"指令3功能及其使用方法"<<endl<<endl;cout<<"指令4功能及其使用方法"<<endl<<endl;cout<<"指令5功能及其使用方法"<<endl<<endl;}第6個模塊是統(tǒng)計信息部分,該模塊用來統(tǒng)計文本信息并通過終端將信息傳遞給用戶。該部分通過接口函數voidFile::Count()實現(xiàn),偽代碼如下:voidFile::Count(){intcc,cp,i,cn;cc=cp=cn=0;for(i=0;i<len;i++){掃描過程中統(tǒng)計字母數、數字數、空格數、總字符數等相關信息。cout<〈"文章字數信息統(tǒng)計如下:"<<endl<<endl;cout<〈"全部字母數:"<<cc<<endl<<endl;cout<<"數字個數:"<<cn<<endl<<endl;cout<<"空格個數:"<<cp<<endl<<endl;cout<〈"文章總字數:"<<len<<endl<<endl;}第7個模塊是子串查找部分,該部分會對用戶在終端輸入的字符串在文本中進行檢索,并將其出現(xiàn)次數反饋給用戶。該部分使用接口函數voidFile::Count_str()實現(xiàn),偽代碼如下:voidFile::Count_str(){inti,j,ls,ct=0;cin.get();cin.getline(str,'80','\n');ls=strlen(str);memset(next,-1,sizeof(next));//以上為數據的輸入及預處理求子串的前綴函數next使用前綴函數next,用KMP算法進行匹配、查找和統(tǒng)計cout<<str<<"在文章中的出現(xiàn)次數為:"<<ct<<endl<<endl;}第8個模塊是查找并刪除所有子串部分。該部分會對用戶在終端輸入的字符串進行查找,并將原文本中所有該子串進行刪除,使用接口函數voidFile::Delete_str()實現(xiàn),偽代碼如下:voidFile::Delete_str(){inti,j,ls,k;memset(visit,false,sizeof(visit));cin.get();cin.getline(str,'80','\n');ls=strlen(str);memset(next,-1,sizeof(next));//子串讀入及數據的預處理計算前綴函數nexti=j=0;使用next函數及稍加修改的KMP算法匹配并刪除原文本中所有用戶輸入的子串len=strlen(s);cout<<s<<endl;第四章詳細設計#include<iostream>#include<fstream>#include<cstdio>#include<cstring>usingnamespacestd;constintN=80010;classFile{private:chars[N];charfilename[260];chartext[90];charstr[90];intlen,next[90];boolvisit[N];ifstreamfin;voidGetready();voidGetdata();voidShow_text();voidCount();voidCount_str();voidDelete_str();voidHelp();public:File(){cout<<"歡迎使用文章編輯工具 版權所有:SDUT計科0906zlq"<<endl<<endl;memset(s,0,sizeof(s));len=0;}voidMain_Work();~File(){cout<<"謝謝您的支持,如有建議和意見,請發(fā)送到zlqest@163.com,謝謝合作"<<endl<<endl;}};voidFile::Getready(){cout<<"請輸入數據文件名(包括擴展名,只能有英文、數字和點號)"<<endl<<endl;cout<<〃注意:由于資源控制,請保證輸入不超過1000行,每行不超過80個字符,查詢的子串長度不得超過一行〃<<endl<<endl;cout<<〃文件名:"; /*讓子串長度不超過一行是為了防止某些用戶在終端中不會用Ctrl+Z來表示EOF*/}voidFile::Getdata(){cin>>filename;fin.open(filename);cout<<〃正在讀取數據....〃<<endl;len=0;while(fin.getline(text,81,'\n')){strcat(s,text);len+=strlen(text);s[len]='\n';s[++len]='\0';}cout<〈〃數據初始化完畢...〃<<endl<<endl;}voidFile::Show_text(){cout<〈〃您的輸入文件內容如下:〃<<endl<<endl;cout<<s<<endl<<endl;}voidFile::Help(){cout<<"您可以使用以下命令"<<endl<<endl;cout<<"count:分別統(tǒng)計出其中英文字母數和空格數及整篇文章總字數"<<endl<<endl;cout<<"search(+換行輸入所要查找的字符串):統(tǒng)計某一字符串在文章中出現(xiàn)的次數,并輸出該次數"<<endl<<endl;cout<<〃delete(+換行輸入所要刪除的字符串):刪除某一子串,并將后面的字符前移"<<endl<<endl;cout<<〃help:查看程序命令集〃<<endl<<endl;cout<<〃exit:退出應用程序〃<<endl<<endl;}voidFile::Count(){intcc,cp,i,cn;cc=cp=cn=0;for(i=0;i<len;i++){if(s[i]>='0'&&s[i]<='9'){cn++;continue;}if(s[i]>='A'&&s[i]<='Z'){cc++;continue;}if(s[i]>='a'&&s[i]<='z'){cc++;continue;}if(s[i]==''){cp++;continue;}cout<〈"文章字數信息統(tǒng)計如下:"<<endl<<endl;cout<〈"全部字母數:"<<cc<<endl<<endl;cout<<"數字個數:"<<cn<<endl<<endl;cout<<"空格個數:"<<cp<<endl<<endl;cout<〈"文章總字數:"<<len<<endl<<endl;}voidFile::Count_str(){inti,j,ls,ct=0;cin.get();cin.getline(str,'80','\n');ls=strlen(str);memset(next,-1,sizeof(next));i=1;while(i<ls){j=next[i-1];while(j>-1&&str[j+1]!=str[i])j=next[j];if(j!=-1)next[i]=j+1;i++;}i=j=0;while(i<len){if(s[i]!=str[j]){j=next[j];if(j==-1){i++;j=0;

}else{i++;j++;}if(j==ls){ct++;j=0;}}cout<<str<<"在文章中的出現(xiàn)次數為:}voidFile::Delete_str(){inti,j,ls,k;memset(visit,false,sizeof(visit))cin.get();cin.getline(str,'80','\n');ls=strlen(str);memset(next,-1,sizeof(next));i=1;while(i<ls){j=next[i-1];while(j>-1&&str[j+1]!=str[i])if(j!=-1)next[i]=j+1;i++;}i=j=0;while(i<len)"<<ct<<endl<<endl;j="<<ct<<endl<<endl;j=next[j];if(s[i]!=str[j]){j=next[j];if(j==-1){i++;j=0;}}else{i++;j++;}if(j==ls){for(k=i-ls;k<i;k++)visit[k]=true;j=0;}}i=j=0;while(j<len){while(j<len&&visit[j])j++;if(j==len)break;s[i++]=s[j++];}s[i]='\0';len=strlen(s);cout<<s<<endl;}voidFile::Main_Work(){charorder[10];this->Getready();this->Getdata();this->Show_text();Help();cout<<"請輸入指令:";while(cin>>order){cout<<endl;if(strcmp(order,"exit")==0)return;if(strcmp(order,"count")==0)Count();elseif(strcmp(order,"search")==0)Count_str();elseif(strcmp(order,"delete")==0)Delete_str();elseif(strcmp(order,"help")==0)Help();elsecout<<"非法指令,請重新輸入。"<<endl<<endl;cout<<"請輸入指令:";}}intmain(){FileText;Text.Main_Work();return0;}deieteC,換行輸入所要刪除的字符串卄刪除某一子串,井將后面的字符前移help:查看程序命令集exit:退出應幷!程序請輸入指令:叩口七裊章字數信息到計如題:全部字譯數使用數字個數:3空格個數:上文章總字數…一請輸測指數據及及其其結結aa在歡迎章中的出現(xiàn)編遨工;6請輸請:指入數據文件名a刪除子件后文本內容如下所示:b42sd3請輸入指令daai.t謝謝您的支持,如商建議和意見,請發(fā)送到21QestP163_con,謝謝合作Jjc刪除子串后文本內容如下所示:.歡迎使用文章編輯工具 版權所有=SDUT計科旳酩曲口請輸入數據文件名〔包括擴展名,只能有英文r數字和點號)注意二由于資源控制.請保證輸人不超過個陰行,每行不超過胸個字符「查詢的子串長度不得遷滬亍文件名'd-fl-taS.七乂七弓的輸入文件內容如下<SoRepeoplebelievethatthereai?ethreecyclesina.person1s:Lifethatstartthedayheot*sheisborn?Thes?threetitlesarethephyfica.1,enotional,andintellectualcycles,andthe^rJiavsperiodsoflensrths:23,2特.and33da.ys,respectiveli!?Thereisonepeakineachperiodof&.cycle?Atthep&akofaGyulsa.p(2)ata2.txt汶匸試數數t及終端輸入t:令運行結果如下cdIngfieId.<physical,ematzonalornsenta.l>?ForeKample,ifitisthementalcurue,tfiougrhtprocesseswillbesharperandconcentrationwillheeasier?SincethethreeeyeLeshavedifferentperiods,thepea.lcsofthethreeeyelesgrenerallyoccuratdifferenttimes.Ueuouldliketodetek'ntineuhenatriplepeakoccursCthepeaksofallthreeeyelesoccurinthesameday>foranypers□n.ForeacheyeLe,youuillbegiuenthenumberofd.ai;£fromthebegrinningiofthecuprentyearatuhichoneofitspeaks<notnecessarilythefipst>occupe:.Youuillalsof?asriuenadateexppB£:E:edasthenumberofdaysfromthef?aSTinninsrofthecupp&ntyear.¥□快taskistodetepniinethenumbepoFdaysFpomthegiuendatetothenexttriplepeak.TViasriuendateienotcounted.Forexample^iFthegiuendateisandthenexttriplepeakoccuLPSondai^12,theansuepis2,n^t3_Ifatrip<epeakoccurs:onthegivendate,iFou.should,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論