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

下載本文檔

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

文檔簡介

青島農業(yè)大學理學與信息科學學院高級語言課程設計報告設計題目文本編輯器學生專業(yè)班級計算機科學與技術學生姓名(學號)設計小組其他同學姓名(學號)指導教師完成時間2011-11-03設計地點信息樓機房2011年11月05日

一、課程設計目的和任務

為了方便處理文本內容,減少在處理文本時的額外活動,設計了本程序。比如在統(tǒng)計文本中的中英文字母數(shù)和空格數(shù)以及整篇文章的總字數(shù)時,可以利用本程序,這樣比較方便、省時。又比如統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù),也可利用本程序。還可以利用本程序將文本的某一子串刪除并將后面的字符前移。二、分析與設計1.程序的基本功能:(1)分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)以及整篇文章的總字數(shù)。(2)統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù)。(3)刪除某一子串,并將后面的字符前移。2.系統(tǒng)總框圖:(1)、統(tǒng)計字符個數(shù)算法流程圖i=0n=0i=0n=0i<Ni>=Nj=0len=strlen(wz[i])j<lenj>=lenif(wz[i][j]>=n1&&wz[i][j]<=n2)n++j++i++returnn算法結束(2)、刪除某一字符串算法流程圖i++;i=0n=0i++;i=0n=0i<Ni>=Nc=strstr(wz[i],s)c!=0c=0leni=strlen(wz[i]);lenc=strlen(c);p=leni-lencreturnn算法結束for(k=1;k<=lens;k++){for(j=p;j<=leni;j++)wz[i][j]=wz[i][j+1];leni=strlen(wz[i])wz[i][j-1]='\0';leni=strlen(wz[i]);}(3)、查找某一字符串出現(xiàn)的次數(shù)算法流程圖i=0n=0i=0n=0i<Ni>=Nc=strstr(wz[i],s)c!=0c=0c=strstr(c+lens,s)n++i++returnn算法結束3.定義的函數(shù)及說明:此程序由12個函數(shù)構成。

(1)存儲結構:charwz[N][80]存儲文章的字符數(shù)組,為全局變量(2)輸入函數(shù):readdat()通過此函數(shù)從文件中讀取文本(3)輸出函數(shù):out()將文本內容輸出(4)字符數(shù)統(tǒng)計函數(shù):intcountword(intn1,intn2)統(tǒng)計ASC碼在n1與n2之間的字符(5)字符串出現(xiàn)次數(shù)統(tǒng)計函數(shù):intcz(char*s)查找某一字符串出現(xiàn)的次數(shù)(6)字符刪除函數(shù):voiddel(char*s)刪除要刪除的字符串(7)主函數(shù):voidmain()通過主函數(shù)調用各個子函數(shù)完成程序功能(8)文件函數(shù)open("E:/yy/wzin.dat","r+")打開文件(9)字符串位置函數(shù)strstr(wz[i],s);字符串s在文章第i行首次出現(xiàn)的位置(10)字符串長度函數(shù)strlen(wz[i]);文章第i行的長度(11)字符串比較函數(shù)strcmp(s1,"@@")比較字符串內容當為@@時停止輸入(12)字符串復制函數(shù)strcpy(wz[i],s1);/*將s1中的內容復制到wz[i]中4.算法設計:本程序要求儲存結構為線性表結構,可以輸入大小寫的英文字母,任何數(shù)字和標點符號。輸出的時候要分行輸出用戶輸入的各行字符,分四行輸出“全部字符數(shù)”“數(shù)字的個數(shù)”“空格個數(shù)”“文章總字數(shù)”及輸出刪除某一字符串后的文章。三、系統(tǒng)實施1.源程序代碼#include<stdio.h>#include<string.h>#defineN20/*文章的行數(shù)*/charwz[N][80];/*存儲文章的字符數(shù)組,為全局變量*//*輸入函數(shù)*/voidreaddat(){FILE*fp;inti,j,len;char*str;if(!(fp=fopen("E:/yy/wzin.dat","r+")))/*打開文件*/printf("Thefilecan'tfound!\n");for(i=0;i<N;i++)fgets(wz[i],80,fp);/*讀文件*/}/*輸出函數(shù)*/voidout(){inti=0;for(i=0;i<N;i++)printf("%s",wz[i]);}intcountword(intn1,intn2)/*統(tǒng)計ASC碼在n1與n2之間的字符*/{inti,j,len;intn=0;/*統(tǒng)計字符數(shù)*/for(i=0;i<N;i++){len=strlen(wz[i]);for(j=0;j<=len;j++)if(wz[i][j]>=n1&&wz[i][j]<=n2)/*wz[i][j]的ASC碼在n1與n2之間,n++*/ n++;}returnn;}intcz(char*s)/*查找某一字符串出現(xiàn)的次數(shù)*/{intn=0;inti;intlens;/*要查找字符串*S的長度*/char*c;lens=strlen(s);for(i=0;i<N;i++){c=strstr(wz[i],s);/*字符串*S在文章第i行第一次出現(xiàn)的位置*/ while(*c!=0){n++;c=strstr(c+lens,s);/*字符串*S在文章第i行下一次出現(xiàn)的位置*/}}returnn;}voiddel(char*s){inti,j,k,leni,lenc,lens;intp;char*c;lens=strlen(s);/*要刪除字符串的長度*/for(i=0;i<N;i++){c=strstr(wz[i],s);/*字符串s在文章第i行首次出現(xiàn)的位置*/while(c!=0)/*c=0則表明字符串s在文章第i行沒有出現(xiàn)*/{leni=strlen(wz[i]);/*文章第i行的長度*/lenc=strlen(c);/*從字符串s在文章第i行首次出現(xiàn)的位置處后的字符串的長度*/ p=leni-lenc;/*兩個長度的差從此行的第p個位置開始刪除*/for(k=1;k<=lens;k++)/*刪除lens次*/ { for(j=p;j<=leni;j++) wz[i][j]=wz[i][j+1];/*字符前移*/leni=strlen(wz[i]);wz[i][j-1]='\0';leni=strlen(wz[i]);}c=strstr(wz[i],s);}}}main(){intword,space,num,zifu;/*字母數(shù),空格數(shù),數(shù)字數(shù),字符數(shù)*/intn;/*某字符串數(shù)*/intleni;inti=0,j=0;chars1[80],*s;printf("Wheredoyouwantthefilecomefrom?\n");/*從文件讀入數(shù)據,或從鍵盤輸入數(shù)據*/printf("Fromweijianpleaseinput1\nfromkeybrodpleaseinput2\n");/*從文件讀入數(shù)據輸入1,還是從鍵盤輸入數(shù)據輸入2*/scanf("%d",&n);getchar();switch(n){case1: readdat(); break;case2: printf("pleaseinputthefileuntill@@\n");gets(s1); while(strcmp(s1,"@@")!=0&&i<N) { strcpy(wz[i],s1);/*將s1中的內容復制到wz[i]中*/ leni=strlen(s1); wz[i][leni]='\n';gets(s1); i++;} break;default: printf("Wronginput!\n"); break;}printf("Thefile'scontent:\n");out();word=countword('a','z')+countword('A','Z');/*統(tǒng)計字母*/printf("\nThetotalwordis:\t%d\n",word);space=countword('','');/*統(tǒng)計空格*/printf("Thetotalspaceis:\t%d\n",space);num=countword('0','9');/*統(tǒng)計數(shù)字*/printf("Thetotalshuziis:\t%d\n",num);/*統(tǒng)計所有字符*/zifu=countword(32,44)+num+countword(59,94)+countword(97,126)+countword(174,175);printf("Thetotalzifuis:\t%d\n",zifu+space);/*字符串的查找*/printf("\npleaseinputasrting:\t");scanf("%s",s);n=cz(s);printf("\nThestring%schuxian%dci\n",s,n);getchar();/*字符串的刪除*/printf("\nWhichstringdoyouwanttodel:\n");printf("pleaseinputastring:\t");scanf("%s",s);printf("\nBeforedelstring%s:\n",s);out();n=cz(s);if(n==0)printf("\nCan'tfindthestring!\n");else{del(s);printf("\nAfterdelstring%s:\n",s);out();}}2.程序運行說明運行說明:程運行序后,先出現(xiàn)一藍色背景,面有三句話:"Wheredoyouwantthefilecomefrom?Fromwenjianpleaseinput1;fromkeybrodpleaseinput2",(1)如果選擇1,則從設定的文件中讀入數(shù)據;如果選擇2,則從鍵盤輸入數(shù)據,直到遇到@@時結束。然后按回車鍵,則出現(xiàn)文本內容。(2)繼續(xù)按回車鍵,出現(xiàn)下例字符“pleaseinputastring”,然后在屏幕上分四行顯示文字,空格,數(shù)字,字符的數(shù)目;(3)然后按回車鍵,在屏幕上出現(xiàn)某一字符出現(xiàn)的次數(shù);(4)按回車鍵,出現(xiàn)“Whichstringdoyouwanttodel:,pleaseinputastring”輸入要刪除的字符;(5)按回車鍵,出現(xiàn)“Beforedelstring”,顯示未刪除時的文本內容,繼續(xù)回車,出現(xiàn)“Afterdelstring:”,則在屏幕上顯示刪除某一字符后的文本內容,到此運行結束。結果說明:運行結果如下圖所示:3.存在的問題:(1)

調試時用鍵盤輸入文章內容的語句為gets(s1),若要換成scanf(“%s”,s1);將會出現(xiàn)不能輸入空格的問題。所以在進行輸入時要使用正確的輸入語句不然就會出現(xiàn)這樣那樣的問題。刪除某一字符串算法的時間復雜度最大,原因在于每刪除一個字符都要進行前移操作,占用了大量時間。假如在進行刪除時進行同時前移strlen(s)個字符,可能會減少一些時間。(2)在設計子串搜索的方法時,采用了將子串的首字符和整個字符串的每個字符逐個比對的算法,但是有時通過前一次的比較可得知接下來的字符與子串顯然不匹配,但程序依然會去一一比較它們.這就產生了一些冗余的計算,尤其是子串本身比較長的時候,冗余的計算量會變得十分大,這個算法有待改進.四、總結與體會在對程序的各個功能模塊進行測試時未發(fā)生錯誤,程序的運行結果也基本達到了預期的設計效果,可認為該程序已基本達到了課題的要求.此次課程設計使我對數(shù)據結構方面的知識有了更加深入的了解,也使我認識到自己在學習編程方面還有很多的不足。今后我要多讀一些編程方面的書籍,不能只拘泥于課本上的知識,并注重理論與實踐的結合,多上機練習編寫程序,提高自己的實際動手能力和獨立思考的能力,不斷充實自己,更好的掌握編程思想。同時,此次課程設計也使我對編程產生了興趣,特別是在通過查書籍資料以及網上資源的情況下能夠使程序運行成功,得到了一種成就感,相對于以前的一組人完

溫馨提示

  • 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

提交評論