數(shù)據(jù)結構文章編輯程序的設計_第1頁
數(shù)據(jù)結構文章編輯程序的設計_第2頁
數(shù)據(jù)結構文章編輯程序的設計_第3頁
數(shù)據(jù)結構文章編輯程序的設計_第4頁
數(shù)據(jù)結構文章編輯程序的設計_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)結構(C語言版)課程設計報告文章編輯程序的設計學院: 信息科學技術學院班級: 信息工程09級1班學號: 200941843107 姓名: 董升 指導教師: 何儒云 完成日期: 2010年12月目錄TOC\o"1-5"\h\z\o"CurrentDocument"需求分析 文章編輯 -3-\o"CurrentDocument"程序設計 -3-結構體的設計: -3-函數(shù)的設計: -3-主函數(shù)的設計: -8-\o"CurrentDocument"測試分析 -9-用戶說明 -10 -\o"CurrentDocument"經驗和體會 -10-\o"CurrentDocument"6?附錄一一程序完整原代碼 -11-需求分析 文章編輯題目:22題,文章編輯。功能:從鍵盤輸入一頁文字,靜態(tài)存儲在一個文件中要求:(1)分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)及整篇文章總字數(shù);(2) 統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);(3) 刪除某一子串,并將后面的字符前移。存儲結構使用線性表,分別用幾個子函數(shù)實現(xiàn)相應的功能;o"文章總字數(shù)”o"文章總字數(shù)”(2) 分4行輸出”全部字母數(shù)"、”數(shù)字個數(shù)”、"空格個數(shù)”、(3) 輸出刪除某一字符串后的文章;程序設計結構體的設計:typedefstructessay{char*line;〃 動態(tài)分配的字符數(shù)組structessay*next;//結構體指針}ESS;//創(chuàng)建結構體,行與行之間用鏈表的形式函數(shù)的設計:#include<stdio.h>#include<string.h>#include<stdlib.h>voidcreate(ESS*&h)〃創(chuàng)造鏈表{charm[1000];ESS*p;p=(ESS*)malloc(sizeof(ESS));h=p;inti,k;FILE*fp;fp=fopen("d:\\text.txt","w");〃所輸入的文本將保存在 d盤的rr文本文檔中printf("輸入文章,用Ctrl+B結束輸入:\n");〃按Ctrl+B(AB)將結束輸入while(1){gets(m); //輸入字符串if(strlen(m)>1000){printf(”超過1000字符\n");break;}if(m[0]==2)break; II如果發(fā)現(xiàn)輸入ab,則退出輸入p=p->next=(ESS*)malloc(sizeof(ESS));p->line=(char*)malloc(sizeof(char)*strlen(m+1)); II為結點分配空間strcpy(p->line,m);〃將字符串m,復制到p所指向的字符串中for(i=0;i<(k=strlen(m))&&(p->line[i]!=2);i++)fwrite(&p->line[i],sizeof(char),1,fp);〃 寫入文本文檔中fputc('\n',fp);if(m[strlen(m)-1]==2) II除去最后一個控制符 ab{p->line[strlen(m)-1]='\0';break;}}p->next=NULL; I*最后的一個指針為空 *Ih=h->next;II將下一個節(jié)點賦值到頭結點中}intCount(ESS*h)II統(tǒng)計數(shù)字{ESS*p=h;intco=0;inti;intLenght;do{Lenght=strlen(p->line);I*計算當前l(fā)ine里的數(shù)據(jù)元素的個數(shù)*I

for(i=0;i<Lenght;i++)if(p->line[i]>=48&&p->line[i]<=57)〃 用ASCII碼來進行比較,數(shù)字co++;}while((p=p->next)!=NULL); //遍歷鏈表不為空returnco;}intLetter(ESS*h)〃統(tǒng)計字母{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);/*計算當前l(fā)ine里的數(shù)據(jù)元素的個數(shù)*/for(inti=0;i<Lenght;i++)if((p->line[i]>='a'&&p->line[i]<='z')||(p->line[i]>='A'&&p->line[i]<='Z'))/*計算字母數(shù)*/co++;}while((p=p->next)!=NULL); //遍歷鏈表不為空returnco; /*返回文章的字母總數(shù)*/}intchinese(ESS*h)〃統(tǒng)計符號{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);/*計算當前l(fā)ine里的數(shù)據(jù)元素的個數(shù)*/for(inti=0;i<Lenght;i++)if((p->line[i]>=1&&p->line[i]<=254))字符數(shù)字以及符號*/co++;}while((p=p->next)!=NULL); //遍歷鏈表不為空returnco; /*返回*/48與57之間是48與57之間是/*計算intSpace(ESS*h)〃統(tǒng)計空格{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);//計算當前l(fā)ine里的數(shù)據(jù)元素的個數(shù)for(inti=0;i<Lenght;i++)if(p->line[i]==32)co++;//計算空格數(shù),空格ASCII碼為32}while((p=p->next)!=NULL); 〃遍歷鏈表returnco;}intCountAII(ESS*h)〃統(tǒng)計文章字數(shù)ESS*p=h;intco=0;//保存鏈表的首地址do{co+=strlen(p->line);}while((p=p->next)!=NULL);returnco;//計算總字符數(shù)}//遍歷鏈表intFind(ESS*h,char*s)〃統(tǒng)計s出現(xiàn)次數(shù){ESS*p=h;intco=0;/*保存當前行的總字符數(shù)*//*保存當前行的總字符數(shù)*//*待統(tǒng)計字符串的長度*//*當前行的字符數(shù)*//*字符匹配*/intlen2=strlen(s);inti,j,q;do{len1=strlen(p->line);for(i=0;i<len1;i++){if(p->line[i]==s[0]){q=0;for(j=0;j<len2;j++)

if(p->line[j+i]==s[j])q++;if(q==len2){co++;i=i+q-1;}}}}while((p=p->next)!=NULL);/*遍歷鏈表/*遍歷鏈表*/}voiddelstring(char*s,char*str)/**s為輸入的字符串,*str為將要刪除的字符*/{char*p=strstr(s,str);/*從字符串s中尋找str第一次出現(xiàn)的位置*/charm[80];intlen=strlen(s);inti=len-strlen(p);〃比較兩串字符串之間的字符個數(shù)intj=i+strlen(str);intco=0;for(intk=O;k<i;k++)m[co++]=s[k];for(intn=j;n<len;n++)m[co++]=s[n];m[co]='\0:strcpy(s,m); /*返回新的字符串*/}voidDelString(ESS*h,char*str){ESS*p=h;do{if(strstr(p->line,str)!=NULL)delstring(p->line,str);〃調用刪除每個字符串,只刪一次。}while((p=p->next)!=NULL);}voidOut(ESS*&h)//{ESS*p=h;do{printf("%s\n",p->line);〃顯示字符串}/*遍歷鏈表/*遍歷鏈表*/voiddisplay。{printf("\n");printf("\n");printf("********************^統(tǒng)計數(shù)^字******************\n")?printf("********************^統(tǒng)計字母******************\n")?printf("********************^統(tǒng)計空^格******************\n")?printf("********************統(tǒng)計文章總字數(shù)************\n");printf("********************統(tǒng)計重復字符串 ************\n");printf("********************統(tǒng)計重復出現(xiàn)字符串********n”);printf("********************除功育總******************\n”)?printf("***********************************************\n");printf("***********************************************\n");printf("\n");}//構造一個良好的界面良好的界面主函數(shù)的設計:intmain(){ESS*h;create(h);display();Out(h);printf("\n");printf("數(shù)字個數(shù):%d\n",Count(h));printf("全部字母數(shù): %d\n",Letter(h));printf("中文字數(shù):%d\n",(CountAII(h)-chinese(h))/2);printf("空格個數(shù):%d\n",Space(h));printf("文章總字數(shù)(含空格):%d\n",CountAII(h)-(CountAII(h)-chinese(h))/2);printf("文章總字數(shù)(不含空格):%d\n",CountAII(h)-Space(h)-(CountAII(h)-chinese(h))/2);chars1[20],s2[20];printf("\n");printf("請輸入要統(tǒng)計的字符串:");scanf("%s",s1);printf("%s出現(xiàn)的次數(shù)為:%d\n”,s1,Find(h,s1));printf("\n");printf("請輸入要刪除的某一字符串: ");scanf("%s",s2);DelString(h,s2);printf("刪除%s后的文章為:\n”,s2);Out(h); 〃調用刪除函數(shù)后的顯示Return0;3?測試分析輸入:匸弋*E* tVisusilStudioXKyF^OjBCtk\22jt^tfilvXDB-bvigXSZe?xewoshizhongguorenuoaiwodezuguo我是中國人我爰我的祖國123123123qwequeqwe輸出及其他操作:

第test,tyt-記事本 匚叵|阪文祥0)錨輯⑥格式?萱看迪幫助堪)uashizhongquorenwoaiuodezuquo我是中國人我愛我的祖國123123123queqweqwe4?用戶說明根據(jù)界面提示即可完成所有操作。5?經驗和體會在這次課程設計中,我有將書本重新過了一邊,不但鞏固了以前就會的知識,還彌補了從前的空缺,學到了許多從前沒有注意的知識。在實踐的過程中,遇到了許多問題,我查閱了許多資料,請教了一些朋友對于編程中應注意的問題又有了新的認識,我知道了許多書上沒有的經驗和教訓。通過進行這次課程設計,我對數(shù)據(jù)結構又有了更加深刻的認識,使我以后學習更加輕松,對于編程更又信心!!6?附錄一一程序完整原代碼#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstructessay{char*line;〃動態(tài)分配的字符數(shù)組structessay*next;//結構體指針}ESS;//創(chuàng)建結構體,行與行之間用鏈表的形式voidcreate(ESS*&h)//創(chuàng)造鏈表{charm[1000];ESS*p;p=(ESS*)malloc(sizeof(ESS));h=p;inti,k;FILE*fp;fp=fopen("d:\\text.txt","w");〃所輸入的文本將保存在 d盤的rr文本文檔中printf("輸入文章,用Ctrl+B結束輸入:\n");//按Ctrl+B(AB)將結束輸入while(1){gets(m); //輸入字符串if(strlen(m)>1000){printf(”超過1000字符\n");break;}if(m[0]==2)break; //如果發(fā)現(xiàn)輸入ab,則退出輸入p=p->next=(ESS*)malloc(sizeof(ESS));p->line=(char*)malloc(sizeof(char)*strlen(m+1)); //為結點分配空間strcpy(p->line,m);〃將字符串m,復制到p所指向的字符串中for(i=0;i<(k=strlen(m))&&(p->line[i]!=2);i++)fwrite(&p->line[i],sizeof(char),1,fp);〃 寫入文本文檔中fputc('\n',fp);if(m[strlen(m)-1]==2) //除去最后一個控制符 AB{p->line[strlen(m)-1]='\0:break;}}p->next=NULL; /*最后的一個指針為空 */h=h->next;//將下一個節(jié)點賦值到頭結點中}intCount(ESS*h)//統(tǒng)計數(shù)字{ESS*p=h;intco=0;inti;intLenght;do{Lenght=strlen(p->line);/*計算當前l(fā)ine里的數(shù)據(jù)元素的個數(shù)*/for(i=0;i<Lenght;i++)if(p->line[i]>=48&&p->line[i]<=57)〃 用ASCII碼來進行比較,48與57之間是數(shù)字co++;}while((p=p->next)!=NULL); //遍歷鏈表不為空returnco;}intLetter(ESS*h)//統(tǒng)計字母{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);/*計算當前l(fā)ine里的數(shù)據(jù)元素的個數(shù)*/for(inti=0;i<Lenght;i++)if((p->line[i]>='a'&&p->line[i]<='z')||(p->line[i]>='A'&&p->line[i]<='Z'))/*計算字母數(shù)*/co++;}while((p=p->next)!=NULL); //遍歷鏈表不為空returnco;/*返回文章的字母總數(shù)*/}intchinese(ESS*h)〃統(tǒng)計符號{ESS*p=h;intco=0;intLenght;do{/*計算Lenght=strlen(p->line);/*計算當前l(fā)ine里的數(shù)據(jù)元素的個數(shù)/*計算if((p->line[i]>=1&&p->line[i]<=254))字符數(shù)字以及符號*/co++;}while((p=p->next)!=NULL); //遍歷鏈表不為空returnco; /*返回*/}intSpace(ESS*h)〃統(tǒng)計空格{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);//計算當前l(fā)ine里的數(shù)據(jù)元素的個數(shù)for(inti=0;i<Lenght;i++)if(p->line[i]==32)co++;//計算空格數(shù),空格 ASCII碼為32}while((p=p->next)!=NULL); //遍歷鏈表returnco;}intCountAII(ESS*h)〃統(tǒng)計文章字數(shù){//保存鏈表的首地址////保存鏈表的首地址//計算總字符數(shù)II遍歷鏈表intco=0;do{co+=strlen(p->line);}while((p=p->next)!=NULL);

returnco;intFind(ESS*h,char*s)〃統(tǒng)計s出現(xiàn)次數(shù){ESS*p=h;intco=0;intlen1=0;intlen2=strlen(s);{ESS*p=h;intco=0;intlen1=0;intlen2=strlen(s);inti,j,q;do{len1=strlen(p->line);for(i=0;i<len1;i++){if(p->line[i]==s[0]){q=0;for(j=0;j<len2;j++)}}}while((p=p->next)!=NULL);returnco;/*保存當前行的總字符數(shù)*//*待統(tǒng)計字符串的長度*/if(p->line[j+i]==s[j])q++;if(q==len2) {co++;i=i+q_1;}/*當前行的字符數(shù)*//*字符匹配*//*遍歷鏈表*/voiddelstring(char*s,char*str)/**s為輸入的字符串,*str為將要刪除的字符*/{char*p=strstr(s,str); /*從字符串s中尋找str第一次出現(xiàn)的位置*/charm[80];intlen=strlen(s);inti=len-strlen(p);〃比較兩串字符串之間的字符個數(shù)intj=i+strlen(str);intco=0;for(intk=O;k<i;k++)m[co++]=s[k];for(intn=j;n<len;n++)m[co++]=s[n];m[co]='\0';strcpy(s,m); /*返回新的字符串*/}

voidDelString(ESS*h,char*str){ESS*p=h;do{if(strstr(p->line,str)!=NULL)delstring(p->line,str);〃調用刪除每個字符串,只刪一次。}while((p=p->next)!=NULL);}voidOut(ESS*&h)//{ESS*p=h;do{printf("%s\n",p->line);〃顯示字符串}while((p=p->next)!=NULL); /*遍歷鏈表*/}voiddisplay(){printf("\n");printf("\n");printf("*********************************************printf("********************printf("********************^統(tǒng)計數(shù)^字******************、門");printf("********************printf("********************^統(tǒng)計字母******************、n")?printf("********************^統(tǒng)計空^格****************printf("********************統(tǒng)計文章總字數(shù)************\n");printf("********************統(tǒng)計重復字符串************\n");printf("*****************

溫馨提示

  • 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

提交評論