版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、課程設(shè)計報告課程設(shè)計題目:文早編輯專業(yè):信息工程班級:1720601學(xué)生姓名:指導(dǎo)教師:、實驗?zāi)康募耙螅喝蝿?wù):輸入一頁文字,程序可以統(tǒng)計出文字、數(shù)字、空格的個數(shù)。靜態(tài)存儲一頁文章,每行最多不超過80個字符,共N行;要求:(1)分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)及整篇文章總字數(shù);(2)統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);(3)刪除某一子串,并將后面的字符前移。存儲結(jié)構(gòu)使用線性表,分別用幾個子函數(shù)實現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標點符號。輸出形式:(D分行輸出用戶輸入的各行字符;(2)分4行輸出“全部字母數(shù)”、”數(shù)字個數(shù)“、”空格個數(shù)”、”
2、文章總字數(shù)”(3) 輸出刪除某一字符串后的文章;實驗時間、地點:一、概要設(shè)計(實驗思路)1 .問題分析本程序是對一段英文文章的內(nèi)容進行處理,存儲方式采用鏈式存儲。對于文本的輸入,采用頭插法將文本信息存儲到鏈表已申請好的存儲空間中,在此部分設(shè)計中最大的問題在于輸入文章過程中輸入的字符數(shù)大于80時如何換行;對于文本內(nèi)容的統(tǒng)計,使用循環(huán)對已存儲的文章進行匹配,字母數(shù)、空格數(shù)、數(shù)字數(shù)直接通過比較即可得到;對于文本內(nèi)容的處理,查找部分仍是使用循環(huán)對已存儲的文章進行匹配,判斷需要查找的字符或者字符串是否與文章中某部分內(nèi)容相同,如果存在相同的記錄相同的個數(shù)及位置并輸出個數(shù)及位置。刪除部分先使用程序的查找功能
3、對文章中需要刪除的字符或者字符串進行查找,然后對其進行刪除。2 .數(shù)據(jù)結(jié)構(gòu)選擇本程序是對輸入的文字進行操作,故使用的數(shù)據(jù)結(jié)構(gòu)為單鏈表操作。根據(jù)第一部分的問題分析有該鏈表操作有3部分:另有全局變量*head,作為文章的頭指針。創(chuàng)建結(jié)構(gòu)體:typedef struct list char data80; int length;struct _list *n ext;struct i st *pre; in trow;記錄一行字符記錄一行字符長度 后繼指針前趨指 針記錄整篇文章的行數(shù)LinkList;在文章內(nèi)容創(chuàng)建部分中使用線性表的鏈式存儲,并使用全局變量對文本的各種信息進行存儲;文章的讀取、內(nèi)容統(tǒng)
4、計、刪除、查找都采用鏈表操作完成。3 .流程圖(1)主框架:(2)文章內(nèi)容統(tǒng)計子菜單(3)文章內(nèi)容處理子菜單文SearchWord。函數(shù)實現(xiàn)查找早二內(nèi)DeleteWord。函數(shù)內(nèi)容刪除容處-Printword()顯示當前內(nèi)容理J子I菜返回主菜單單退出程序I.(4)使用函數(shù)列表及關(guān)系圖函數(shù)名:1、CreatWord()文本輸入函數(shù),對文本的內(nèi)容進行輸入2、PrintWord()當前文本內(nèi)容輸出函數(shù),將當前存儲在鏈表中的文本內(nèi)容輸出5、CountWord()文章內(nèi)容統(tǒng)計函數(shù),對存儲在鏈表中文本內(nèi)容進行統(tǒng)計6、SearchWord()文章內(nèi)容查找函數(shù)7、DeleteWord()文章內(nèi)容刪除函數(shù)8、B
5、menu()文本內(nèi)容處理菜單函數(shù)9、AboutWord()顯示作者信息的函數(shù)10、menu()主菜單函數(shù)11、main()主函數(shù)關(guān)系圖:二、詳細設(shè)計(實驗過程)1、數(shù)據(jù)結(jié)構(gòu)定義char data80; int length; struct list *next; struct list *pre; int row;typedefstructlist/記錄一行字符V/記錄一行字符長度/后繼指針/前趨指針*/記錄整篇文章的行數(shù)*/LinkList;2、全局變量定義LinkListhead;/*定義全局變量*head,文章首行頭指針/intNUM,C,N;/*定義全局變量,Num用來記錄行號,C用來
6、記錄子串在主串中出現(xiàn)的總次數(shù)*/3、函數(shù)說明(1)CreatWord()文本創(chuàng)建函數(shù)LinkList*CreatWord()(LinkList*temp;charch;intij;head->next=(LinkList*)malloc(sizeof(LinkList);/head->pre=NULL;temp=head->next;/temp->pre=NULL;temp->length=O;for(i=0;i<80;i+)temp->datai='O'叫叩門多j.j創(chuàng)建文本7,.27,7,7,7,7,7,7,7,7,請輸入文章(輸入
7、#號結(jié)束):nn");for(j=0;j<Link_Size;j+)for(i=0;i<80;i+)ch=getchar();temp->datai=ch;temp->length+;if(ch=f#f)NUM=j;break;)if(ch=,#1)(temp->length=i;temp->next=NULL;break;temp->next=(LinkList*)malloc(sizeof(LinkList);temp->next->pre=temp;temp=temp->next;for(i=0;i<80;i+)
8、temp->datai='O'4emp->row=NUM+1;system("cls');return(temp);)說明:a、定義LinkList指針變量*temp:LinkList*temp;b、定義文本輸入變量ch,記錄文本行數(shù)變量j,記錄每行字符數(shù)變量i;c、申請動態(tài)存儲空間:head->next=(LinkList*)malloc(sizeof(LinkList);d、首行頭指針的前驅(qū)指針為空:head->pre=NULL;首行指針:temp=head->next;首行指針的前驅(qū)指針也為空:temp->pre=NU
9、LL;定義沒輸入字符時文章長度為0:temp->length=O;初始化為字符串結(jié)束標志,防止出現(xiàn)亂碼:for(i=0;i<80;i+4-)temp->datai='O'e、利用循環(huán)進行文本輸入for(j=0;jvLINKNIT_SIZE;j+)控制一頁for(i=0;iv80;i+)控制一行ch=getchar();/接收輸入字符temp->datai=ch;/給temp指向的行賦值temp->length+;行中字符長度加1if(ch=#)NUM=j;break;/文章結(jié)束時,Num來記錄整個文章的行數(shù))在字符輸入的過程中,如果在單行輸入的字符
10、超過了80個字符,則需要以下操作:輸入字符數(shù)大于80,重新分配空間建立下一行:temp->next=(LinkList*)malloc(sizeof(LinkList);給temp的前驅(qū)指針賦值:temp->next->pre=temp;temp指向當前行:temp=temp->next;將下一行初始化為字符串結(jié)束標志,防止出現(xiàn)亂碼:for(i=0;i<80;i+)temp->datai=*0'記錄整個文章的行數(shù):temp->row=NUM+1;返回指向最后一行指針:returntemp;文本輸入部分到此結(jié)束。2)PrintWord()文章顯示
11、函數(shù)voidPrintWord()inti,j;LinkList*p;p=head->next;systemCls'*);printf(nnH);pritf(H|tprintf(',tt*piytf(A!t.printf(nn當前文章的內(nèi)容是:n");for(j=0;j<=NUM&&p!=NULL;j+)for(i=0;(i<80)&&(p->datai)!=,#,;i+)printf("c”,p->datai);p=p->next;說明:a、定義文本行數(shù)變量j,每行字符數(shù)i:intij;b
12、、定義指針變量:LinkList*p;c、將指針p指向鏈表表頭:p=head->next;d、利用循環(huán)輸出鏈表中信息:for(j=0;j<=NUM&&p!=NULL;j+)=for(i=0;(i<80)&&(p->datai)!='#'i+)=printf("%c",p->datai);p=p->next;文本顯示部分到此結(jié)束。(3)CountWord()文章內(nèi)容統(tǒng)計函數(shù)voidCountWord()LinkList*temp;charch;intij,t;intWORD=0,word=0,
13、space=05num=0,sum=0;temp=head->next;for(j=0;j<=NUM;j+)for(i=0;(i<80)&&(temp->datai)!=#*;i+)(ch=temp->datai;if(ch>=,A,)&&(ch<=Z,)WORD+;elseif(ch>=,a,)&&(ch<='z,)word+;elseif(ch>=0,)&&(ch<='9')num+;elseif(ch='')space+
14、;)sum=WORD+word+num;)while(1)printf(”n");printf("n");printf(nn");printf(ntt*nH);prin;f("向i1文熹內(nèi)套統(tǒng);十子翥單''W城也7 printf("tt* printf(Htt* printf("tt* printf(ntt* printf("tt*7,7,7,%d n",WORD+word);%d n",num);%d n",space);%d n",sum);*5);7,7
15、,V17,文章中字母的個數(shù):文章中數(shù)字的個數(shù):文章中空格的個數(shù):文章中所有字的個數(shù):1 、退出返回主菜單printf(Htt* 2、直接退出本系統(tǒng)3*n“);printf(”tt 請選擇:”);scanf(-cT,&t);if(t=1)system(',clsn);break;elseif(t=2)exit(0);elseprintf("tt對不起,無此功能!請回車重新選擇L.n");printf(W);fflush(stdin);getchar();說明:a、定義指針變量temp:LinkList*temp;b、定義記錄文本行數(shù)變量j,每行字符數(shù)i;C、定
16、義記錄文本大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字數(shù)和總字數(shù)的變量:intWORD=0,word=0,space=0,num=0,sum=0;d、將指針temp指向鏈表表頭:temp=head->next;利用循環(huán)對鏈表中信息進行匹配判斷,將大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字數(shù)和總字數(shù)統(tǒng)計出來:for(j=0;j<=NUM;j+)<for(i=0;(i<80)&&(temp->datai)!=,#,;i+)<ch=temp->datai;if(ch>=,A,)&&(ch<='Z,)WORD+;elsei
17、f(ch>='a')&&(ch<='z,)word+;elseif(ch>='0')&&(ch<=,9,)num+;elseif(ch=*')space+;isum=WORD+word+num;e、本程序?qū)y(tǒng)計項目設(shè)計了菜單。菜單的編寫使用while語句進行循環(huán)操作。文本內(nèi)容統(tǒng)計部分到此結(jié)束。(4)SearchWord()文章內(nèi)容查找函數(shù)voidSearchWord(char*str1,LinkList*temp)charData20;inti,j,k=0,sum=0;int1=1;temp
18、=head->next;strcpy(Data,str1);for(i=0;i<=NUM;i+)for(j=0;jv80;j+)(if(temp->dataj)=Datak)k+;elseif(Datak!=,0,)j=j-k;k=0;)if(Datak=,O,)(sum+;j=j-k+1;printf("ttt第£次出現(xiàn)在第d行第%(列n",l,i+1,j);I+;k=0;continue;temp=temp->next;printf(nnttt字符串總共出現(xiàn)次數(shù)為:%dnn",sum);C=sum;N=i*80+j;說明:a、
19、定義一個數(shù)組,用來記錄需要查找的字符內(nèi)容:charData20;b、定義定義文本行數(shù)變量j,每行字符數(shù)i,記錄字符出現(xiàn)的次數(shù)變量:inti,j,m=0.,sum=0;c、對形參中定義的指針變量進行操作,使其指向鏈表表頭:temp=head->next;d、 使用拷貝函數(shù),將形參中strl的值賦給Data:strcpy(Data,str1);e、 利用循環(huán)進行查找操作:for(i=0;iv=NUM;i+)/利用循環(huán)進行查找操作/(for(j=0;j<80;j+)if(temp->dataO)=Datak)k+;/*將輸入的查找字符與鏈表中信息比較,找到第一個相同的字符/else
20、if(Datak!=,0,)卜卜k;/*從主串第卜k個位置重新查找7k=0;)if(Datak=,0')<sum+;/*此字符出現(xiàn)的次數(shù)加1j4k+1;/*j記錄下該字符串出現(xiàn)的位置Vprintf("ttt第心次出現(xiàn)在第。/。6氣境%4列J);I+;k=0;continue;)temp=temp->next;/*指向下一行“I文本內(nèi)容查找部分到此結(jié)束,5) DeleteWord()文章內(nèi)容刪除函數(shù)voidDeleteWord(char*str2)<charData20;LinkList*temp,*term;inti,j,a5k5m5y5num;strcpy
21、(Data,str2);for(y=0;y<C;y+)num=80;k=O,m=O;temp=head;for(i=0;iv=NUM;i+)term=temp;temp=temp->next;for(j=0;j<80;j+)<if(temp->dataO)=Datak)k+;elseif(Datak!=,O,)j=j-k;k=O;if(Datak='O')(num=j;break;)if(num<80)break;4or(;i<=NUM;i+)(for(;j<80;j+)if(j+1<k)(term->data80-k
22、+num=temp->dataj+1;elsetemp->dataj-k4-1=temp->dataj+1;)term=temp;temp=temp->next;j=0;),說明:a、定義一個數(shù)組用來存儲需要刪除的字符或者字符串:charData20;b、定義指針變量:LinkList*temp、*term;c、定義整形變量用來控制行數(shù)、字符數(shù):inti,j,k,m,y,num;d、使用拷貝函數(shù)講形參中需要刪除的字符或字符串賦值給已定義的數(shù)組:strcpy(Data,str2);f、使用循環(huán)進行刪除操作:for(y=0;y<C;y+)num=80;k=O,m=O;
23、temp=head;for(i=0;iv=NUM;i+)/*使用循環(huán)進行刪除操作/term=temp;temp=temp->next;for(j=0;j<80;j+)if(temp->dataj)=Datak)k+;elseif(Datak!='O')j=j-k;k=O;if(Datak=,O,)(num=j;break;if(num<80)break;)/*首先是使用循環(huán)查找到需要刪除字符或者字符串的字符數(shù)以及字符或者字符串的位置,以便于刪除*/for(;i<=NUM;i+)(for(;j<80;j+)(if(j+1<k)(term-
24、>data80-k+num=temp->dataj+1;/*刪除的字符串不在最后一行,將下一行的字符(由temp指向)前移到前行/elsetemp->dataj-k+1=temp->dataj+1;/*當要刪除的字符串在最后一行只要將最后一行的字符前移*/term=temp;temp=temp->next;/*在使用循環(huán),從查找到的字符或者字符串開始進行刪除,在一行刪除完畢之后,轉(zhuǎn)至下一行進行刪除*/j=0;)文本內(nèi)容刪除部分到此完成。6) Bmenu()文章內(nèi)容處理菜單函數(shù)voidBmenu(LinkList*temp)charstr120;charstr220
25、;intt;do/*利用dowhile循環(huán)來控制主菜單顯示/printf(An11);printf("ntt*ri”printf(nttprintf(Attprintf(ntt*文章內(nèi)容處理子菜單*、口”)printf ("tt*printf(ntt printf("tt printf(ntt printf(nttprintf(Htt*12345查找文章中的字符或者字符串 刪除文章中的字符或者字符串 顯示當前文章內(nèi)容返回主菜單直接退出系統(tǒng)*、口")請選擇*nn);* *nn);*n");*nn);*nn);*nn);scanf("%d
26、n,&t);if(t>5)|(t<1)printf (”tt對不起,無此功能!請回車重新選擇!.n");printf(uttn);fflush(stdin);getchar();elseswitch (t)(case 1:system(HclsH); printf (Hnn);,rintf(nn|t* , printf(ntt*fn");碑*printf("nttt請輸入您需要查找的字符或字符串:");getchar(); gets(strl);printf (nnn);SearchWord(str1 ,temp);prin tf(n
27、ntt按回車鍵繼續(xù) getchar();getchar();system("clsH);break;case 2:system(nclsn);printf (HnH);pri ntf("ntt*n")printf(Httprintf(Att *文章內(nèi)容處理子菜單*、門”) 5);printf("nttt請輸入您需要刪除的字符或字符串:");getchar();gets(str2);printfCn");SearchWord(str2,temp);DeleteWord(str2);printf("ttt刪除%s后的文章為:;s
28、tr2);PrintWord();printf(nntt按回車鍵繼續(xù)getchar();getchar();system("clsn);break;case3:system(,clsH);*文printf(nnntt*printf(ntt*nH);文章內(nèi)容處理子菜單*5);R爐r國(“跑2R必RRRR-T.-T.-1.-T.-T.-T.-1.-T.PrintWord();”);printf(nnntt按回車鍵繼續(xù)getchar();getchar();system(,'clsn);break;)if(t=4)systemCls");break;)if(t=5)exi
29、t(O);)while(1);說明:用do-while語句來制作文章內(nèi)容處理菜單,用switch語句來選擇實現(xiàn)功能7) AboutWord()相關(guān)性息voidAboutWord()printf("nnnnnnnnn);printf(t*k'Uk'Uk'Uk'UkJUprintf”本系統(tǒng)由chevis制作部分功能則是仿照其他程序能力有限謝謝使用!printf(t*k'Uk!>kJU«<Gnk'UkJU-T.-t.-t.-T.-zT.-t.printf("n");(8)menu()主菜voidmen
30、u()(intt;LinkList*temp;doprintf("n");printf(',nn);printf(HnH);printf("tt*nM);fprintf代卜產(chǎn)卜jj葡翠的攵拿褊巍j-''''匹卜);printf(ntt*nM);)-JJJJJJJJJJ.1,PrintfCN舌菜整,一,.;'吸printf(”tt*n");printf(ntt*printf(Mtt*printf(ntt*printf(Att*printf(ntt*printf(Att*1、文章內(nèi)容輸入2、顯示當前文章內(nèi)容3、
31、文章內(nèi)容統(tǒng)計子菜單4、文章內(nèi)容處理子菜單5、程序相關(guān)6、退出文章編輯器:鬻相!心始露編白黑瀛譚裊,和:printf(',ttprintf("看輸關(guān)相應(yīng)數(shù)章:");喳scanf(,%d,5&t);if(t>6)|(t<1)(printf(”tt對不起,無此功能!請回車重新選擇!.n“);printf(ntt");fflush(stdin);getchar();)elseswitch(t)(case 1:system("clsn);printf("n");temp=CreatWord();break;case
32、2:system(Hclsn);PrintWord();printf(An',);printf(An");););););););printf("ntt按回車鍵繼續(xù)”);getchar();getchar();system(cls');break;case3:system(cls');CountWord();break;case4:system(“cls");Bmenu(temp);break;case5:system(cls');AboutWord();printf(“ntt按回車鍵繼續(xù)”);getchar();getchar()
33、;system(“cls");break;if(t=6)break;)while(1);)說明:用do-while語句來制作文章內(nèi)容處理菜單,用switch語句來選擇實現(xiàn)功能。main。主函數(shù)voidmain()(head=(LinkList*)malloc(sizeof(LinkList);menu();說明:/先為head申請存儲空間,然后創(chuàng)建指針變量temp,然后直接在主菜單函數(shù)中進行其他操作7三、上機調(diào)試上機調(diào)試過程中遇到的問題及解決方法:a)由于本程序的操作大部分都為經(jīng)常使用的查找、刪除,基本的算法及代碼都可以通過查找資料得到,故沒有出現(xiàn)多大的問題。錯誤主要是在于刪除等子函數(shù)中復(fù)雜操作過程中出現(xiàn)的小問題。b)刪除及查找過程中需要在子函數(shù)中定義一個數(shù)組變量,用來存儲輸入的信息,然后用來與鏈表中的信息進行比較以達到刪除或者查找。另為達到將輸入的信息賦值給子函數(shù)中定義的數(shù)組,特使用了strcpy()函數(shù)。c)為了將程序界面更加的完美,做了3個菜單。清屏函數(shù)使用system(“cis背景字體顏色編寫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 通信原理綜合課程設(shè)計
- 食品廠人工濕地課程設(shè)計
- 音頻界面設(shè)計課程設(shè)計
- 陶瓷包裝課程設(shè)計
- 香港教育學(xué)院課程設(shè)計
- 車輛評估課程設(shè)計
- 幼兒園祖國生日課程設(shè)計
- 鹽浴電阻爐課程設(shè)計
- 魚缸布景課程設(shè)計
- GB/T 45163.1-2024起重機械智能化系統(tǒng)第1部分:術(shù)語和分級
- 五年級上冊口算練習(xí)400題及答案
- 預(yù)防保健科主任競聘課件
- 團隊成員介紹
- 水泵行業(yè)銷售人員工作匯報
- 《流感科普宣教》課件
- 離職分析報告
- 春節(jié)家庭用電安全提示
- 醫(yī)療糾紛預(yù)防和處理條例通用課件
- 廚邦醬油推廣方案
- 乳腺癌診療指南(2024年版)
- 保險產(chǎn)品創(chuàng)新與市場定位培訓(xùn)課件
評論
0/150
提交評論