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

下載本文檔

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

文檔簡介

數據結構課設文章編寫數據結構課設文章編寫企業(yè)標準化工作小組#Q8QGGQT-*****8-GNQGJ8-MHHGN#課程設計報告課程設計題目:文章編輯專業(yè):信息工程班級:***-*****學生姓名:指導教師:、實驗目的及要求:任務:輸入一頁文字,程序可以統(tǒng)計出文字、數字、空格的個數。靜態(tài)儲藏一頁文章,每行最多不高出80個字符,共N行;要求:(1)分別統(tǒng)計出其中英文字母數和空格數及整篇文章總字數;2)統(tǒng)計某一字符串在文章中出現的次數,并輸出該次數;3)刪除某一子串,并將后邊的字符前移。儲藏結構使用線性表,分別用幾個子函數實現相應的功能;輸入數據的形式和范圍:可以輸入大寫、小寫的英文字母、任何數字及標點符號。輸出形式:1)分行輸出用戶輸入的各行字符;2)分4行輸出“全部字母數"、"數字個數"、"空格個數"、"文章總字數"3)輸出刪除某一字符串后的文章;實驗時間、地址:一、大綱設計(實驗思路)1.問題解析本程序是對一段英文文章的內容進行辦理,儲藏方式采用鏈式儲藏。對于文本的輸入,采用頭插法將文本信息儲藏到鏈表已申請好的儲藏空間中,在此部分設計中最大的問題在于輸入文章過程中輸入的字符數大于80時如何換行;對于文本內容的統(tǒng)計,使用循環(huán)對已儲藏的文章進行般配,字母數、空格數、數字數直接經過比較即可獲取;對于文本內容的辦理,查找部分仍是使用循環(huán)對已儲藏的文章進行般配,判斷需要查找的字符也許字符串可否與文章中某部分內容相同,若是存在相同的記錄相同的個數及地址并輸出個數及地址。刪除部分先使用程序的查找功能對文章中需要刪除的字符也許字符串進行查找,爾后對其進行刪除。數據結構選擇本程序是對輸入的文字進行操作,故使用的數據結構為單鏈表操作。依照第一部分的問題解析有該鏈表操作有3部分:還有全局變量*head,作為文章的頭指針。創(chuàng)辦結構體:typedefstructlist{chardata;程圖(1)主框架:(2)文章內容統(tǒng)計子菜單(3)文章內容辦理子菜單(4)使用函數列表及關系圖函數名:1、CreatWord()文本輸入函數,對文本的內容進行輸入2、PrintWord()當前文本內容輸出函數,將當前儲藏在鏈表中的文本內容輸出5、CountWord()文章內容統(tǒng)計函數,對儲藏在鏈表中文本內容進行統(tǒng)計6、SearchWord()文章內容查找函數7、DeleteWord()文章內容刪除函數8、Bmenu()文本內容辦理菜單函數9、AboutWord()顯示作者信息的函數10、menu()主菜單函數11、main()主函數關系圖:二、詳細設計(實驗過程)1、數據結構定義typedefstructlist{chardata;/*記錄一行字符*/intlength;/*記錄一行字符長度*/structlist*next;/*后繼指針*/structlist*pre;/*前趨指針*/introw;/*記錄整篇文章的行數*/}LinkList;2、全局變量定義LinkList*head;/*定義全局變量*head,文章首行頭指針*/intNUM,C,N;/*定義全局變量,Num用來記錄行號,C用來記錄子串在主串中出現的總次數*/3、函數說明1)CreatWord()文本創(chuàng)辦函數LinkList*CreatWord(){LinkList*temp;charch;inti,j;head-next=(LinkList*)malloc(sizeof(LinkList));/head-pre=NULL;temp=head-next;/temp-pre=NULL;temp-length=0;for(i=0;ii++)temp-data[i]='\0';printf("\t\t****************************************************\n");printf("\t\t****創(chuàng)辦文本****\n");printf("\t\t****************************************************\n");printf("\t\t請輸入文章(輸入#號結束):\n\n");for(j=0;jLink_Size;j++){for(i=0;ii++){ch=getchar();temp-data[i]=ch;temp-length++;if(ch=='#'){NUM=j;break;}}if(ch=='#'){temp-length=i;temp-next=NULL;break;}temp-next=(LinkList*)malloc(sizeof(LinkList));temp-next-pre=temp;temp=temp-next;for(i=0;ii++)temp-data[i]='\0';}temp-row=NUM+1;system("cls");return(temp);}說明:a、定義LinkList指針變量*temp:LinkList*temp;b、定義文本輸入變量ch,記錄文本行數變量j,記錄每行字符數變量i;c、申請動向儲藏空間:head-next=(LinkList*)malloc(sizeof(LinkList));d、首行頭指針的前驅指針為空:head-pre=NULL;首行指針:temp=head-next;首行指針的前驅指針也為空:temp-pre=NULL;定義沒輸入字符時文章長度為0:temp-length=0;初始化為字符串結束標志,防范出現亂碼:for(i=0;ii++)temp-data[i]='\0';e、利用循環(huán)進行文本輸入for(j=0;jLINK_INIT_SIZE;j++).\n");printf("\t\t");fflush(stdin);getchar();}}}說明:a、定義指針變量temp:LinkList*temp;b、定義記錄文本行數變量j,每行字符數i;c、定義記錄文本大寫字母數、小寫字母數、空格數、數字數和總字數的變量:intWORD=0,word=0,space=0,num=0,sum=0;d、將指針temp指向鏈表表頭:temp=head-next;利用循環(huán)對鏈表中信息進行般配判斷,將大寫字母數、小寫字母數、空格數、數字數和總字數統(tǒng)計出來:for(j=0;j=NUM;j++){for(i=0;(i80)(temp-data[i])!='#';i++){ch=temp-data[i];if((ch='A')(ch='Z'))WORD++;elseif((ch='a')(ch='z'))word++;elseif((ch='0')(ch='9'))num++;elseif(ch=='')space++;}sum=WORD+word+num;}e、本程序對統(tǒng)計項目設計了菜單。菜單的編寫使用while語句進行循環(huán)操作。文本內容統(tǒng)計部分到此結束。4)SearchWord()文章內容查找函數voidSearchWord(char*str1,LinkList*temp){charData;inti,j,k=0,sum=0;intl=1;temp=head-next;strcpy(Data,str1);for(i=0;i=NUM;i++){for(j=0;jj++){if((temp-data[j])==Data[k])k++;elseif(Data[k]!='\0'){j=j-k;k=0;}if(Data[k]=='\0'){sum++;j=j-k+1;printf("\t\t\t第%d次出現在第%d行第%d列\(zhòng)n",l,i+1,j);l++;k=0;continue;}}temp=temp-next;}printf("\n\t\t\t字符串總合出現次數為:%d\n\n",sum);C=sum;N=i*80+j;}說明:a、定義一個數組,用來記錄需要查找的字符內容:charData;b、定義定義文本行數變量j,每行字符數i,記錄字符出現的次數變量:inti,j,m=0.,sum=0;c、對形參中定義的指針變量進行操作,使其指向鏈表表頭:temp=head-next;d、使用拷貝函數,將形參中str1的值賦給Data:strcpy(Data,str1);e、利用循環(huán)進行查找操作:for(i=0;i=NUM;i++)/*利用循環(huán)進行查找操作*/{for(j=0;jj++){if((temp-data[j])==Data[k])k++;/*將輸入的查找字符與鏈表中信息比較,找到第一個相同的字符*/elseif(Data[k]!='\0'){j=j-k;/*從主串第j-k個地址重新查找*/k=0;}if(Data[k]=='\0'){sum++;/*此字符出現的次數加1*/j=j-k+1;/*j記錄下該字符串出現的地址*/printf("\t\t\t第%d次出現在第%d行第%d列\(zhòng)n",l,i+1,j);l++;k=0;continue;}}temp=temp-next;/*指向下一行*/}文本內容查找部分到此結束。5)DeleteWord()文章內容刪除函數voidDeleteWord(char*str2){charData;LinkList*temp,*term;inti,j,a,k,m,y,num;strcpy(Data,str2);for(y=0;yy++){num=80;k=0,m=0;temp=head;for(i=0;i=NUM;i++){term=temp;temp=temp-next;for(j=0;jj++){if((temp-data[j])==Data[k])k++;elseif(Data[k]!='\0'){j=j-k;k=0;}if(Data[k]=='\0'){num=j;break;}}if(num80)break;}for(;i=NUM;i++){for(;jj++){if(j+1k){term-data[80-k+num]=temp-data[j+1];}else{temp-data[j-k+1]=temp-data[j+1];}}term=temp;temp=temp-next;j=0;}}}說明:a、定義一個數組用來儲藏需要刪除的字符也許字符串:charData;b、定義指針變量:LinkList*temp,*term;c、定義整形變量用來控制行數、字符數:inti,j,k,m,y,num;d、使用拷貝函數講形參中需要刪除的字符或字符串賦值給已定義的數組:strcpy(Data,str2);f、使用循環(huán)進行刪除操作:for(y=0;yy++){num=80;k=0,m=0;temp=head;for(i=0;i=NUM;i++)/*使用循環(huán)進行刪除操作*/{term=temp;temp=temp-next;for(j=0;jj++){if((temp-data[j])==Data[k])k++;elseif(Data[k]!='\0'){j=j-k;k=0;}if(Data[k]=='\0'){num=j;break;}}if(num80)break;}/*第一是使用循環(huán)查找到需要刪除字符也許字符串的字符數以及字符也許字符串的地址,以便于刪除*/for(;i=NUM;i++){for(;jj++){if(j+1k){term-data[80-k+num]=temp-data[j+1];/*刪除的字符串不在最后一行,將下一行的字符(由temp指向)前移到前行*/}else{temp-data[j-k+1]=temp-data[j+1];/*當要刪除的字符串在最后一行只要將最后一行的字符前移*/}}term=temp;temp=temp-next;/*在使用循環(huán),從查找到的字符也許字符串開始進行刪除,在一行刪除達成此后,轉至下一行進行刪除*/j=0;}}文本內容刪除部分到此達成。(6)Bmenu()文章內容辦理菜單函數voidBmenu(LinkList*temp){charstr1;charstr2;intt;do/*利用{printf("\n");

dowhile

循環(huán)來控制主菜單顯示

*/printf("\n\t\t****************************************************\n");printf("\t\t****文章內容辦理子菜單****\n");printf("\t\t****************************************************\n");printf("\t\t****1、查找文章中的字符也許字符串****\n");printf("\t\t****2、刪除文章中的字符也許字符串****\n");printf("\t\t****3、顯示當前文章內容****\n");printf("\t\t****4、返回主菜單****\n");printf("\t\t****5、直接退出系統(tǒng)****\n");printf("\t\t****************************************************\n");printf("\t\t請選擇:");scanf("%d",if((t5)||(t1)){printf("\t\t對不起,無此功能!請回車重新選擇!...\n");printf("\t\t");fflush(stdin);getchar();}else{switch(t){case1:system("cls");printf("\n");printf("\n\t\t****************************************************\n");printf("\t\t****文章內容辦理子菜單****\n");printf("\t\t****************************************************\n");printf("\n\t\t\t請輸入您需要查找的字符或字符串:");getchar();gets(str1);printf("\n");SearchWord(str1,temp);printf("\n\t\t按回車鍵連續(xù)");getchar();getchar();system("cls");break;case2:system("cls");printf("\n");printf("\n\t\t****************************************************\n");printf("\t\t****文章內容辦理子菜單****\n");printf("\t\t****************************************************\n");printf("\n\t\t\t請輸入您需要刪除的字符或字符串:");getchar();gets(str2);printf("\n");SearchWord(str2,temp);DeleteWord(str2);printf("\t\t\t刪除%s后的文章為:",str2);PrintWord();printf("\n\t\t按回車鍵連續(xù)");getchar();getchar();system("cls");break;case3:system("cls");printf("\n\n\t\t****************************************************\n");printf("\t\t****文章內容辦理子菜單****\n");printf("\t\t****************************************************\n");PrintWord();printf("\n\n\t\t按回車鍵連續(xù)");getchar();getchar();system("cls");break;}if(t==4){system("cls");break;}if(t==5)exit(0);}}while(1);}說明:用do-while語句來制作文章內容辦理菜單,用switch語句來選擇實現功能。(7)AboutWord()相關性息voidAboutWord(){printf("\n\n\n\n\n\n\n\n");printf("\t****************************************************************\n");printf("\t****本系統(tǒng)由chevis制作部分功能則是模擬其他程序能力有限***\n");printf("\t****感謝使用!***\n");printf("\t****************************************************************\n");printf("\n");}8)menu()主菜單voidmenu(){intt;LinkList*temp;do{printf("\n");printf("\n");printf("\n");printf("\t\t****************************************************\n");printf("\t\t****簡單的文章編寫器****\n");printf("\t\t****************************************************\n");printf("\t\t*********主菜單*********\n");printf("\t\t****************************************************\n");printf("\t\t****1、文章內容輸入****\n");printf("\t\t****2、顯示當前文章內容****\n");printf("\t\t****3、文章內容統(tǒng)計子菜單****\n");printf("\t\t****4、文章內容辦理子菜單****\n");printf("\t\t****5、程序相關****\n");printf("\t\t****6、退出文章編寫器****\n");printf("\t\t****************************************************\n");printf("\t\t!!!注:第一次運行本程序時請選擇1功能進行輸入!!!\n");printf("\t\t****************************************************\n");printf("\t\t請輸入相應數字:");scanf("%d",if((t6)||(t1)){printf("\t\t對不起,無此功能!請回車重新選擇!...\n");printf("\t\t");fflush(stdin);getchar();}else{switch(t){case1:system("cls");printf("\n");temp=CreatWord();break;case2:system("cls");PrintWord();printf("\n");printf("\n");printf("\n\t\t按回車鍵連續(xù)");getchar();getchar();system("cls");break;case3:system("cls");CountWord();break;case4:system("cls");Bmenu(temp);break;case5:system("cls");AboutWord();printf("\n\t\t按回車鍵連續(xù)");getchar();getchar();system("cls");break;}if(t==6)break;}}while(1);}說明:用do-while語句來制作文章內容辦理菜單,用switch語句來選擇實現功能。(9)main()主函數voidmain(){head=(LinkList*)malloc(sizeof(LinkList));menu();}說明:/*先為head申請儲藏空間,爾后創(chuàng)辦指針變量temp,爾后直接在主菜單函數中進行其他操作*/三、上機調試上機調試過程中遇到的問題及解決方法:a)由于本程序的操作大部分都為經常使用的查找、刪除,基本的算法及代碼都可以經過查找資料獲取,故沒有出現多大的問題。錯誤主若是在于刪除等子函數中復雜操作過程中出現的小問題。b)刪除及查找過程中需要在子函數中定義一個數組變量,用來儲藏輸入的信息,爾后用來與鏈表中的信息進行比較以達到刪除也許查找。另為達到將輸入的信息賦值給子函數中定義的數組,特使用了strcpy()函數。c)為了將程序界面更加的圓滿,做了3個菜單。清屏函數使用system(“cls),”背景字體顏色編寫了一個color函數。d)一開始編寫程序時,在保存、讀取這一部分考慮到方便就采用了以節(jié)點為單位來儲藏。由于文件儲藏的限制性,以節(jié)點儲藏發(fā)生錯誤。今后采用了單個字符儲藏和讀取來保證文本的保存和讀

溫馨提示

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

評論

0/150

提交評論