

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)</b></p><p> 題 目 文章編輯系統(tǒng) </p><p><b> 文章編輯系統(tǒng)</b></p><p><b> 1、內(nèi)容綜述:</b></p><
2、;p> 此系統(tǒng)要求功能:輸入一頁文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個(gè)數(shù)。</p><p> 基本要求靜態(tài)存儲(chǔ)一頁文章,每行最多不超過80個(gè)字符,共N行;s要求(1)分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);(2)統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);(3)刪除某一子串,并將后面的字符前移。</p><p><b> 可行性分析:</b>
3、;</p><p> 對于文本的輸入采用頭插法將文本信息存儲(chǔ)到鏈表已申請好的存儲(chǔ)空間中對于文本內(nèi)容的統(tǒng)計(jì)使用循環(huán)對已存儲(chǔ)的文章進(jìn)行匹配大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)直接通過條件比較即可得到對于文本內(nèi)容的處理查找部分仍是使用循環(huán)對已存儲(chǔ)的文章進(jìn)行匹配判斷需要查找的字符或者字符串是否與文章中某部分內(nèi)容相同如果存在相同的記錄相同的個(gè)數(shù)。刪除部分先使用程序的查找功能對文章中需要?jiǎng)h除的字符或者字符
4、串進(jìn)行查找然后對其進(jìn)行刪除。 </p><p><b> 2、系統(tǒng)設(shè)計(jì)</b></p><p><b> 2.1需求分析:</b></p><p> 存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;</p><p> 輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符
5、號(hào)。</p><p> 輸出形式:(1)、分行輸出用戶輸入的各行字符;</p><p> ?。?)、分4行輸出"全部字母數(shù)"、"數(shù)字個(gè)數(shù)"、"空格個(gè)數(shù)"、"文章總字?jǐn)?shù)"</p><p> ?。?)、輸出刪除某一字符串后的文章;</p><p><b>
6、 2.2總體設(shè)計(jì)</b></p><p> 根據(jù)題目,可得主程序設(shè)計(jì)流程圖如下所示:</p><p><b> 圖2-1</b></p><p> 文章輸入、瀏覽、統(tǒng)計(jì)串、統(tǒng)計(jì)及刪除的詳細(xì)流程如圖2—2所示:</p><p> 回車 回車 回車</p><p>
7、;<b> Ctrl+E</b></p><p><b> 回車</b></p><p><b> 回車</b></p><p><b> 回車</b></p><p><b> 回車</b></p><
8、p> 回車 回車</p><p><b> 接上頁</b></p><p><b> 回車</b></p><p><b> 回車回車</b></p><p><b> 回車
9、</b></p><p><b> 回車</b></p><p><b> 圖2-2</b></p><p> 2.2.1.輸入模塊</p><p> 存儲(chǔ)結(jié)構(gòu):采用單鏈表結(jié)構(gòu)存儲(chǔ)文章,每個(gè)結(jié)點(diǎn)存儲(chǔ)一行,每行最長不超過80個(gè)字符。</p><p> 結(jié)構(gòu)
10、定義:typedef struct line</p><p><b> {</b></p><p> char *data; //字符串指針需要時(shí)動(dòng)態(tài)分配內(nèi)存</p><p> struct line *next;</p><p><b> }LINE;</b></p>
11、<p> 算法描述:用gets函數(shù)接收輸入,每遇到一個(gè)回車換行就新建一個(gè)結(jié)點(diǎn),將當(dāng)前行存入其data域。當(dāng)發(fā)現(xiàn)輸入為^E時(shí),在Data的最后加上字符串結(jié)束標(biāo)志,并置當(dāng)前結(jié)點(diǎn)的Next指針域?yàn)镹ULL。</p><p><b> 2.2.2統(tǒng)計(jì)模塊</b></p><p> 統(tǒng)計(jì)模塊包括統(tǒng)計(jì)全部字母數(shù),統(tǒng)計(jì)數(shù)字個(gè)數(shù),統(tǒng)計(jì)空格個(gè)數(shù),以及統(tǒng)計(jì)文章總字?jǐn)?shù),這四
12、個(gè)部分的實(shí)現(xiàn)算法大體相同,四者的關(guān)系是:全部字母數(shù)+數(shù)字個(gè)數(shù)+空格個(gè)數(shù)=文章總字?jǐn)?shù),也就是說可以在統(tǒng)計(jì)出其中三者的前提下計(jì)算出第四個(gè)的數(shù)量。</p><p> 另外一個(gè)重要的統(tǒng)計(jì)功能是統(tǒng)計(jì)某一字符串在整篇文章中出現(xiàn)的次數(shù),這個(gè)需要用到串的模式匹配算法來實(shí)現(xiàn)。</p><p><b> 2.2.3刪除模塊</b></p><p> 刪除模塊
13、的算法思想類同統(tǒng)計(jì)字符串的算法思想,由于采用了鏈表的存儲(chǔ)結(jié)構(gòu),使得刪除算法的時(shí)間復(fù)雜度大大減少。</p><p> 2.2.4 查找模塊</p><p> int FindString(LINE * &head,char *str) /*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/</p><p> 求在一行中Str出現(xiàn)的次數(shù)的流程圖:</p>&l
14、t;p> ?、伲檎业谝粋€(gè)字符,如果有第一個(gè)字符即p->data[i]==str[0],設(shè)計(jì)數(shù)器k=0</p><p> ?、冢檎疫@個(gè)字符后面的字符與要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++</p><p> ③.重復(fù)第二步,如果k=len2,則查找到,count++;如果沒查找到,重新進(jìn)行第一步</p><
15、p><b> 圖2-3</b></p><p> void delstringword(char *s,char *str) /*刪除字符串*s中的字符串*str*/</p><p><b> 實(shí)現(xiàn)思想:</b></p><p> ?、伲畯淖址畇中尋找str第一次出現(xiàn)的位置 *p=strstr(s,str)
16、;</p><p> ?、冢甽en=strlen(s);i=len-strlen(p)即前i項(xiàng)恰好不含要?jiǎng)h除的字符串,將前i項(xiàng)復(fù)制到tmp中</p><p> ?、郏甹=i+strlen(str) 即要?jiǎng)h除的字符串在i+1和j之間,將j之后的字符串復(fù)制到tmp中</p><p> ?、埽畬mp賦給串s,返回s</p><p><b&g
17、t; 圖2-3</b></p><p><b> 2.3詳細(xì)設(shè)計(jì):</b></p><p> #include <string.h></p><p> #include <stdio.h></p><p> #include <stdlib.h></p>
18、;<p> #include <conio.h></p><p> typedef struct line</p><p><b> {</b></p><p> char *data;</p><p> struct line *next;</p><p>&
19、lt;b> }LINE;</b></p><p> void Create(LINE * &head)</p><p><b> {</b></p><p> printf ("請輸入一頁文章,以Ctrl+E為結(jié)尾(每行最多輸入80字符!):\n");</p><p>
20、; LINE *p=new LINE; /*首先為鏈表 建立一個(gè)附加表頭結(jié)點(diǎn)*/ </p><p> head=p; /*將p付給 表頭指針*/</p><p> char ch[100];</p><p>&l
21、t;b> while(1)</b></p><p><b> {</b></p><p> gets(ch); /*輸入字符串!*/</p><p> if(strlen(ch)>80)</p><p><b> {</b><
22、;/p><p> printf("每行最多輸入80字符");</p><p><b> break;</b></p><p><b> }</b></p><p> if(ch[0]==5)break; /*如果發(fā)現(xiàn)輸入 ^E,則退出輸入*/
23、</p><p> p=p->next=new LINE;</p><p> p->data=new char[strlen(ch)+1]; /*為結(jié)點(diǎn)分配空間 */ </p><p> strcpy(p->data,ch);</p><p> if(ch[strlen(ch)-1]==5)
24、 /*除去最后一個(gè)控制符 ^E */</p><p> { </p><p> p->data[strlen(ch)-1]='\0';</p><p><b> break;</b></p><p><b> }</b></p>
25、<p><b> }</b></p><p> p->next=NULL; /*最后的一個(gè)指針為空 */</p><p> head=head->next;</p><p><b> }</b></p><p> /**文
26、本字?jǐn)?shù)統(tǒng)計(jì)**/</p><p> int Count_Space(LINE* &head)//統(tǒng)計(jì)空格數(shù) </p><p><b> {</b></p><p> LINE *p=head;</p><p> int asc_space=32;</p><p> int cou
27、nt=0;</p><p><b> int i;</b></p><p><b> int Len;</b></p><p><b> do{</b></p><p> Len=strlen(p->data);</p><p> for
28、(i=0;i<Len;i++)</p><p> if(p->data[i]==asc_space)</p><p><b> count++;</b></p><p> }while((p=p->next)!=NULL);</p><p> return count;</p>&
29、lt;p><b> }</b></p><p> int Count_Num(LINE * &head)//統(tǒng)計(jì)數(shù)字個(gè)數(shù) </p><p><b> {</b></p><p> LINE *p=head;</p><p> int count=0;</p>&
30、lt;p><b> int Len;</b></p><p><b> int i;</b></p><p><b> do{</b></p><p> Len=strlen(p->data);</p><p> for(i=0;i<Len;i++)
31、</p><p> if(p->data[i]>=48 && p->data[i]<=57)</p><p><b> count++;</b></p><p> }while((p=p->next)!=NULL);</p><p> return count; &l
32、t;/p><p><b> }</b></p><p> int Count_All_Word(LINE * &head)//統(tǒng)計(jì)文章的總字?jǐn)?shù) </p><p><b> {</b></p><p> LINE *p=head;</p><p> int cou
33、nt=0;</p><p><b> do{</b></p><p> count+=strlen(p->data);</p><p> }while((p=p->next)!=NULL);</p><p> return count;</p><p><b> }
34、</b></p><p> int Count_Letter(LINE * &head)//統(tǒng)計(jì)字母數(shù) </p><p><b> {</b></p><p> LINE *p=head;</p><p> int count=0;</p><p><b>
35、 int Len;</b></p><p><b> int i;</b></p><p><b> do{</b></p><p> Len=strlen(p->data);</p><p> for(i=0;i<Len;i++)</p><p&
36、gt; if(p->data[i]>='a' && p->data[i]<='z'||p->data[i]>='A' && p->data[i]<='Z')count++; //計(jì)算字母個(gè)數(shù)</p><p><b> }</b></p
37、><p> while((p=p->next)!=NULL);</p><p> return count;</p><p><b> }</b></p><p> int Find_Word(LINE * &head,char *sch)//統(tǒng)計(jì) sch 在文章中出現(xiàn)的次數(shù)</p>&l
38、t;p><b> {</b></p><p> LINE *p=head;</p><p> int count=0;</p><p> int len1=0;</p><p> int len2=strlen(sch);</p><p> int i,j,k;</p>
39、;<p><b> do{</b></p><p> len1=strlen(p->data);//當(dāng)前行的字符數(shù)</p><p> for(i=0;i<len1;i++)</p><p><b> {</b></p><p> if(p->data[i]=
40、=sch[0])</p><p><b> {</b></p><p><b> k=0;</b></p><p> for(j=0;j<=len2-1;j++)</p><p> if(p->data[i+j]==sch[j])k=k+1;</p><p&g
41、t; if(k==len2) {count++;i=i+k-1;}</p><p><b> }</b></p><p><b> }</b></p><p> }while((p=p->next)!=NULL);</p><p> return count; </p>
42、<p><b> }</b></p><p> /**特定字符串的刪除**/</p><p> void del_string_word(char *s,char *sch) </p><p><b> {</b></p><p> char *p=strstr(s,sch)
43、;</p><p> char tmp[80];</p><p> int len=strlen(s);</p><p><b> int k,kk;</b></p><p> int i=len-strlen(p);</p><p> int j=i+strlen(sch);</
44、p><p> int count=0;</p><p> for(k=0;k<i;k++)</p><p> tmp[count++]=s[k];</p><p> for(kk=j;kk<len;kk++)</p><p> tmp[count++]=s[kk];</p><p&
45、gt; tmp[count]='\0';</p><p> strcpy(s,tmp);</p><p><b> }</b></p><p> void Del_String(LINE * &head,char *sch)//刪除指定的字符串</p><p><b> {&l
46、t;/b></p><p> LINE *p=head;</p><p><b> do{</b></p><p> while(strstr(p->data,sch)!=NULL)</p><p> del_string_word(p->data,sch);</p><p&
47、gt; }while((p=p->next)!=NULL);</p><p><b> }</b></p><p> /**打印輸入的文本**/</p><p> void OutPutTxt(LINE * &head)//向屏幕輸出文章 </p><p><b> {</b>
48、;</p><p> LINE *p=head;</p><p> printf("文本文件輸出如下:");</p><p><b> do{</b></p><p> printf("%s\n",p->data);</p><p> }wh
49、ile((p=p->next)!=NULL);</p><p><b> }</b></p><p> void Count(LINE * &head)</p><p><b> {</b></p><p> printf("文章統(tǒng)計(jì)信息結(jié)果:\n");&l
50、t;/p><p> printf("全部字母數(shù):%d\n",Count_Letter(head));</p><p> printf("數(shù)字個(gè)數(shù):%d\n",Count_Num(head));</p><p> printf("空格個(gè)數(shù): %d \n",Count_Space(head));</p&
51、gt;<p> printf("文章總字?jǐn)?shù): %d\n",(Count_All_Word(head)+Count_Num(head)+Count_Space(head)+Count_Letter(head))/2);</p><p> printf("\n");</p><p><b> }</b></
52、p><p> void main()</p><p><b> {</b></p><p> LINE *head;</p><p> char sch[20];</p><p> char ID[10];</p><p><b> char ch;<
53、;/b></p><p> char tmp_sch[20];</p><p> printf(" 文章編輯系統(tǒng) \n");</p><p> printf(" 開發(fā)者:吉星星 \n");&
54、lt;/p><p> printf(" 學(xué)號(hào):20102344910\n");</p><p><b> while(1)</b></p><p><b> {</b></p><p> printf(&
55、quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");</p><p> printf(" 1.新建文本\n");</p><p> printf(" 2.瀏覽
56、輸入文本\n");</p><p> printf(" 3.文本字符統(tǒng)計(jì)\n");</p><p> printf(" 4.指定字符串的統(tǒng)計(jì)\n");</p><p> printf("
57、 5.指定字符串的刪除\n");</p><p> printf(" 6.退出\n");</p><p> printf(" ****************************************************************\n");<
58、;/p><p> printf("請輸入序號(hào):");</p><p> scanf("%s",ID);</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(strcmp
59、(ID,"1")==0)</p><p><b> {</b></p><p> printf("新建文本要覆蓋已有文本,是否繼續(xù)輸入?(Y/N)\n");</p><p> getchar();</p><p> scanf("%c",&ch)
60、;</p><p> system("cls");</p><p> if(ch=='n'||ch=='N')</p><p><b> break;</b></p><p> else if(ch=='y'||ch=='Y')&
61、lt;/p><p> Create(head);</p><p><b> break;</b></p><p><b> }</b></p><p> else if(strcmp(ID,"2")==0)</p><p><b> {&l
62、t;/b></p><p> system("cls");</p><p> OutPutTxt(head);</p><p><b> break;</b></p><p><b> }</b></p><p> else if(strc
63、mp(ID,"3")==0)</p><p><b> {</b></p><p> system("cls");</p><p> OutPutTxt(head);</p><p> printf("\n");</p><p>
64、 Count(head);</p><p><b> break;</b></p><p><b> }</b></p><p> else if(strcmp(ID,"4")==0)</p><p><b> {</b></p>&
65、lt;p> system("cls");</p><p> printf("請輸入要統(tǒng)計(jì)的字符串:");</p><p> scanf("%s",sch);</p><p> printf("\n");</p><p> OutPutTxt(hea
66、d);</p><p> printf("\n");</p><p> printf("出現(xiàn)的次數(shù)為: %d\n",Find_Word(head,sch));</p><p><b> break;</b></p><p><b> }</b>&
67、lt;/p><p> else if(strcmp(ID,"5")==0)</p><p><b> {</b></p><p> system("cls");</p><p> printf("請輸入要?jiǎng)h除的某一字符串:");</p><
68、;p> scanf("%s",tmp_sch);</p><p> printf("\n");</p><p> OutPutTxt(head);</p><p> Del_String(head,tmp_sch);</p><p> printf("刪除后");&l
69、t;/p><p> OutPutTxt(head);</p><p><b> break;</b></p><p><b> }</b></p><p> else if(strcmp(ID,"6")==0)</p><p><b> {
70、</b></p><p> printf("你確定要退出系統(tǒng)嗎?(Y/N)\n");</p><p> getchar();</p><p> scanf("%c",&ch);</p><p> system("cls");</p><
71、p> if(ch=='n'||ch=='N')</p><p><b> break;</b></p><p> else if(ch=='y'||ch=='Y') exit(0);</p><p><b> }</b></p>&
72、lt;p><b> else</b></p><p><b> {</b></p><p> system("cls");</p><p> printf("您輸入字母有錯(cuò),請重新輸入!\n\n");</p><p><b> bre
73、ak;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 3、
74、系統(tǒng)實(shí)現(xiàn)</b></p><p><b> 圖3-2</b></p><p><b> 4 系統(tǒng)測試</b></p><p><b> 1、主界面</b></p><p><b> 圖4-1</b></p><p&g
75、t;<b> 2、新建文本界面</b></p><p><b> 圖4-2</b></p><p><b> 3、瀏覽文本</b></p><p><b> 圖4-3</b></p><p><b> 4、文本字符統(tǒng)計(jì)</b>
76、;</p><p><b> 圖4-4</b></p><p><b> 5、特定字符串統(tǒng)計(jì)</b></p><p><b> 圖4-5</b></p><p><b> 6、特定字符串刪除</b></p><p><
77、b> 圖4-6</b></p><p><b> 5 、結(jié)束語</b></p><p> 本次課程設(shè)計(jì),所用知識(shí)基本上包括了所學(xué)的知識(shí)以及很多有關(guān)C++的基礎(chǔ)知識(shí),課程設(shè)計(jì)的過程中自己更更進(jìn)一步了解了鏈表,掌握了數(shù)據(jù)結(jié)構(gòu)的思想與方法,也使我認(rèn)識(shí)到自己在學(xué)習(xí)編程方面還有很多的不足。自己在編寫程序的過程中,不是所有知識(shí)一下就想起來的,而是出現(xiàn)了不少
78、錯(cuò)誤,通過調(diào)試,在查閱一些資料后,才整理出來的。今后我要多讀一些編程方面的書籍,不能只拘泥于課本上的知識(shí),并注重理論與實(shí)踐的結(jié)合,多上機(jī)練習(xí)編寫程序,提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力,不斷充實(shí)自己,更好的掌握編程思想。</p><p><b> 參考文獻(xiàn):</b></p><p> [1] 李根強(qiáng).《數(shù)據(jù)結(jié)構(gòu)(c++版) 》.第二版, 中國水利水電出版社&l
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文章編輯(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---文章編輯
- 文章編輯_數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 文章編輯_數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-文章編輯
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--文章編輯
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—文章編輯設(shè)計(jì)報(bào)告
- c語言數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---文章編輯
- c語言數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-文章編輯
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文章編輯集合運(yùn)算
- 簡單行編輯系統(tǒng)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- c語言(數(shù)據(jù)結(jié)構(gòu))-文章編輯系統(tǒng)
- 高級(jí)數(shù)據(jù)結(jié)構(gòu)課程論文---文章編輯
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----行編輯程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——簡單行編輯程序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文本編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(論文)任務(wù)書--棧和隊(duì)列及其應(yīng)用 文章編輯
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--文字編輯器
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論