




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)科學(xué)與技術(shù)系課程設(shè)計(jì)報(bào)告20082009學(xué)年第二學(xué)期課程數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)名稱(chēng)簡(jiǎn)單的文本編輯器學(xué)生姓名學(xué)號(hào)專(zhuān)業(yè)班級(jí)指導(dǎo)教師2009年6月1、 題目及要求名稱(chēng):簡(jiǎn)單的文本編輯器內(nèi)容:輸入一頁(yè)文字,程序可以統(tǒng)計(jì)出文字、數(shù)字、空格的個(gè)數(shù)。靜態(tài)存儲(chǔ)一頁(yè)文章,每行最多不超過(guò)80個(gè)字符,共N行。要求:(1)分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);(1) 統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);(2) 刪除某一字符或者子串,并將后面的字符前移。(3) 插入某一字符或者子串。(4) 查找某一字符或者子串。存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以
2、輸入大寫(xiě)、小寫(xiě)的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。輸出形式:(5) 分行輸出用戶輸入的各行字符;(6) 分4行輸出"全部字母數(shù)"、"數(shù)字個(gè)數(shù)"、"空格個(gè)數(shù)"、"文章總字?jǐn)?shù)"(7) 輸出刪除某一字符串后的文章。通過(guò)題目及其要求可知,本程序應(yīng)實(shí)現(xiàn)以下功能:(8) 文章內(nèi)容的輸入:包括字母、標(biāo)點(diǎn)符號(hào)、數(shù)字等;(9) 文章內(nèi)容的統(tǒng)計(jì):包括文章中大寫(xiě)字母、小寫(xiě)字母、數(shù)字、標(biāo)點(diǎn)符號(hào)、空格以及文章所有字?jǐn)?shù)的個(gè)數(shù)的統(tǒng)計(jì);(10) 文章內(nèi)容的處理:包括對(duì)文章內(nèi)容的查找、刪除以及對(duì)指定位置進(jìn)行插入操作,其中在查找的過(guò)程中統(tǒng)計(jì)出該字符或字符
3、串在文章中出現(xiàn)的次數(shù);1、問(wèn)題分析本程序是對(duì)一段英文文章的內(nèi)容進(jìn)行處理,存儲(chǔ)方式采用鏈?zhǔn)酱鎯?chǔ),沒(méi)有文件操作,故本程序?qū)ζ湮谋緝?nèi)容的所有操作都是在鏈表中進(jìn)行的。對(duì)于文本的輸入,采用頭插法將文本信息存儲(chǔ)到鏈表已申請(qǐng)好的存儲(chǔ)空間中,在此部分設(shè)計(jì)中最大的問(wèn)題在于輸入文章過(guò)程中輸入的字符數(shù)大于80時(shí)如何換行;對(duì)于文本內(nèi)容的統(tǒng)計(jì),使用循環(huán)對(duì)已存儲(chǔ)的文章進(jìn)行匹配,大寫(xiě)字母數(shù)、小寫(xiě)字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)直接通過(guò)比較即可得到,標(biāo)點(diǎn)符號(hào)通過(guò)ASCn比較即可得到;對(duì)于文本內(nèi)容的處理,查找部分仍是使用循環(huán)對(duì)已存儲(chǔ)的文章進(jìn)行匹配,判斷需要查找的字符或者字符串是否與文章中某部分內(nèi)容相同,如果存在相同的記錄相同的個(gè)數(shù)及位置
4、并輸出個(gè)數(shù)及位置。刪除部分先使用程序的查找功能對(duì)文章中需要?jiǎng)h除的字符或者字符串進(jìn)行查找,然后對(duì)其進(jìn)行刪除。插入部分為通過(guò)輸入的插入位置(行、歹U)將字符或者字符串插入到文章制定位置。數(shù)據(jù)結(jié)構(gòu)選擇和概要設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)選擇:本程序是對(duì)輸入的文字進(jìn)行操作,故使用的數(shù)據(jù)結(jié)構(gòu)為單鏈表操作。根據(jù)第部分的問(wèn)題分析有該鏈表操作有3部分:PreTempNext另有全局變量*head,作為文章的頭指針。故創(chuàng)建了以下結(jié)構(gòu)體:typedefstruct_listchardata80;/記錄一行字符intlength;記錄一行字符長(zhǎng)度struct_list*next;/后繼指針struct_list*pre;前趨指針in
5、trow;記錄整篇文章的行數(shù)LinkList;在文章內(nèi)容創(chuàng)建部分中使用線性表的鏈?zhǔn)酱鎯?chǔ),并使用全局變量對(duì)文本的各種信息進(jìn)行存儲(chǔ);文章的內(nèi)容統(tǒng)計(jì)、刪除、查找、插入都采用鏈表操作完成。本程序?yàn)閷⒉藛喂δ芡昝阑褂昧舜罅康膁owhile語(yǔ)句。概要設(shè)計(jì):程序框架:*歡迎使用簡(jiǎn)單的文本編輯器*主菜單*1、輸入文本內(nèi)容*2、顯示當(dāng)前文本內(nèi)容*3、文本內(nèi)容統(tǒng)計(jì)菜單*4、文本內(nèi)容處理菜單*5、關(guān)于*6、退出本系統(tǒng)*注:第一次使用本系統(tǒng)時(shí)請(qǐng)選擇1號(hào)功能*文本內(nèi)容的輸入,CreatWord(),將文本內(nèi)容輸入到已申請(qǐng)的存儲(chǔ)空間中顯示函數(shù),PrintWord(),將當(dāng)前文本中內(nèi)容顯示出來(lái)一個(gè)類(lèi)似與作者信息的代碼,
6、AboutWord(),顯示作者信息退出系統(tǒng)兩個(gè)子菜單:如選擇上圖中功能3,則有:*文章內(nèi)容統(tǒng)計(jì)菜單*1、文章中大寫(xiě)字母的個(gè)數(shù)*2、文章中小寫(xiě)字母的個(gè)數(shù)*3、文章中數(shù)字的個(gè)數(shù)*4、文章中標(biāo)點(diǎn)符號(hào)的個(gè)數(shù)*5、文章中空格的個(gè)數(shù)*6、文章中所有字?jǐn)?shù)*7、退出返回主菜單*8、直接退出本系統(tǒng)*如選擇功能4,則有:*文章內(nèi)容處理菜單*1、*2、*3、*4、查找文章中的字符或者字符串刪除文章中的字符或者字符串向文章中插入字符或者字符串顯示當(dāng)前文章內(nèi)容*5、返回主菜單*6、直接退出系統(tǒng)*判斷6使用子函數(shù)使用子函數(shù)使用子函數(shù)使用函數(shù)返回到主菜結(jié)束整個(gè)程SearchWord(),對(duì)存儲(chǔ)在鏈表DeleteWord(
7、),對(duì)存儲(chǔ)在鏈表InsertWord(),對(duì)存儲(chǔ)在鏈表PrintWord()將當(dāng)前文本單繼續(xù)其他菜單中的文本進(jìn)行字符或者字符中文本進(jìn)行字符或者字符串中的文本進(jìn)行字符或者字符信息顯示出來(lái)串查找的刪除串的插入圖3簡(jiǎn)單的文本編輯器-文本內(nèi)容處理菜單根據(jù)以上各圖,本程序共設(shè)計(jì)了11個(gè)函數(shù)。1、HeadWord()標(biāo)題函數(shù),即一個(gè)輸出標(biāo)題,永遠(yuǎn)出現(xiàn)在程序的最頂端。2、CreatWord()文本輸入函數(shù),實(shí)現(xiàn)上圖1菜單功能1,對(duì)文本的內(nèi)容進(jìn)行輸入;3、PrintWord()當(dāng)前文本內(nèi)容輸出函數(shù),實(shí)現(xiàn)上圖1菜單功能2以及圖3中功能4,將當(dāng)前存儲(chǔ)在鏈表中的文本內(nèi)容輸出;4、CountWord()文章內(nèi)容統(tǒng)計(jì)函
8、數(shù),實(shí)現(xiàn)上圖1菜單功能3,對(duì)存儲(chǔ)在鏈表中文本內(nèi)容進(jìn)行統(tǒng)計(jì),包括對(duì)文本內(nèi)容中的大寫(xiě)字母、小寫(xiě)字母、數(shù)字、標(biāo)點(diǎn)符號(hào)、空格以及文章所有字?jǐn)?shù)的個(gè)數(shù)的統(tǒng)計(jì);圖2是對(duì)其完整描述;5、SearchWord()文章內(nèi)容查找函數(shù),實(shí)現(xiàn)上圖3菜單功能1中查找部分;6、DeleteWord()文章內(nèi)容刪除函數(shù),實(shí)現(xiàn)上圖3菜單功能2中刪除部分;7、InsertWord()文章內(nèi)容插入函數(shù),實(shí)現(xiàn)上圖3菜單功能3中插入部分;8、Bmenu()第二子菜單函數(shù),實(shí)現(xiàn)上圖1菜單功能4,圖3是此函數(shù)實(shí)現(xiàn)的結(jié)果,它將5、6、7各子函數(shù)集合在此函數(shù)中;9、AboutWord()顯示作者信息的函數(shù),實(shí)現(xiàn)上圖1菜單功能5。10、menu
9、()主菜單函數(shù),其結(jié)果為圖1所顯示部分,將1、2、3、4、8、9等函數(shù)集合。11、main()主函數(shù)各函數(shù)關(guān)系用流程圖形式繪制如下:圖4各函數(shù)之間的關(guān)系一、詳細(xì)設(shè)計(jì)及編碼1、 定義單鏈表結(jié)點(diǎn)類(lèi)型typedefstruct_list行表結(jié)構(gòu)chardata80;/記錄一行字符intlength;記錄一行字符長(zhǎng)度struct_list*next;/后繼指針struct_list*pre;前趨指針introw;記錄整篇文章的行數(shù)LinkList;2、 全局變量的定義intNUM,C,N;定義全局變量,Num用來(lái)記錄行號(hào),C用來(lái)記錄子串在主串中出現(xiàn)的總次數(shù)LinkList*head;/定義全局變量*h
10、ead,文章首行頭指針3、 各子函數(shù)的偽碼A)CreatWord()文本內(nèi)容輸入函數(shù)具體創(chuàng)建過(guò)程如下:a、定義LinkList指針變量*temp:LinkList*temp;b、定義文本輸入變量ch,記錄文本行數(shù)變量j,記錄每行字符數(shù)變量i;c、申請(qǐng)動(dòng)態(tài)存儲(chǔ)空間:head->next=(LinkList*)malloc(sizeof(LinkList);d、首行頭指針的前驅(qū)指針為空:head->pre=NULL;首行指針:temp=head->next;首行指針的前驅(qū)指針也為空:temp->pre=NULL;定義沒(méi)輸入字符日文章長(zhǎng)度為0:temp->length=
11、0;初始化為字符串結(jié)束標(biāo)志,防止出現(xiàn)亂碼:for(i=0;i<80;i+)temp->datai尸0'e、利用循環(huán)進(jìn)行文本輸入for(j=0;j<LINK_INIT_SIZE;j+)控制一頁(yè)for(i=0;i<80;i+)/控制一行ch=getchar();/接收輸入字符temp->datai=ch;/給temp指向的行賦值一temp->length+;/行中字符長(zhǎng)度加1if(ch='#')NUM=j;break;/文章結(jié)束時(shí),Num來(lái)記錄整個(gè)文章的行數(shù)在字符輸入的過(guò)程中,如果在單行輸入的字符超過(guò)了80個(gè)字符,則需要以下操作:輸入字符
12、數(shù)大于80,重新分配空間建立下一行temp->next=(LinkList*)malloc(sizeof(LinkList);給temp的前驅(qū)指針賦值:temp->next->pre=temp;temp指向當(dāng)前行:temp=temp->next;將下一行初始化為字符串結(jié)束標(biāo)志,防止出現(xiàn)亂碼:for(i=0;i<80;i+)temp->datai='0'記錄整個(gè)文章的行數(shù):temp->row=NUM+1;返回指向最后一行指針:returntemp;文本輸入部分到此結(jié)束。B)、PrintWord()當(dāng)前文本輸出函數(shù)本子函數(shù)功能為將當(dāng)前存儲(chǔ)在
13、鏈表中的文本信息輸出在屏幕上,具體偽碼算法如下:a、定義文本行數(shù)變量j,每行字符數(shù)i:inti,j;b、定義指針變量: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;文本輸出函數(shù)到此結(jié)束。C)、CountWord()文本內(nèi)容統(tǒng)計(jì)函數(shù)本子函數(shù)是對(duì)文本中內(nèi)
14、容進(jìn)行統(tǒng)計(jì)。具體偽碼算法如下:a、定義指針變量temp:LinkList*temp;b、定義記錄文本行數(shù)變量j,每行字符數(shù)i;c、定義記錄文本大寫(xiě)字母數(shù)、小寫(xiě)字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)、標(biāo)點(diǎn)數(shù)和總字?jǐn)?shù)的變量:intWORD=0,word=0,space=0,num=0,punct=0,sum=0;d、將指針temp指向鏈表表頭:temp=head->next;e、利用循環(huán)對(duì)鏈表中信息進(jìn)行匹配判斷,將大寫(xiě)字母數(shù)、小寫(xiě)字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)、標(biāo)點(diǎn)數(shù)和總字?jǐn)?shù)統(tǒng)計(jì)出來(lái):for(j=0;j<=NUM;j+)for(i=0;(i<80)&&(temp->datai)!=
15、'#'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+;elseif(ch=3311ch=3411ch=3911ch=4411ch=4611ch=5811ch=5911ch=
16、63)punct+;sum=WORD+word+num;f、本程序?qū)y(tǒng)計(jì)項(xiàng)目設(shè)計(jì)了菜單提供給用戶選擇。菜單的編寫(xiě)使用dowhile語(yǔ)句進(jìn)行循環(huán)操作,此部分不再多談。D)SearchWord()文本內(nèi)容查找函數(shù)本子函數(shù)是對(duì)文本內(nèi)容進(jìn)行查找并且對(duì)查找的內(nèi)容進(jìn)行統(tǒng)計(jì)其出現(xiàn)的次數(shù)。具體偽碼算法如下:a、定義一個(gè)數(shù)組,用來(lái)記錄需要查找的字符內(nèi)容:charData20;b、定義定義文本行數(shù)變量j,每行字符數(shù)i,記錄字符出現(xiàn)的次數(shù)變量:inti,j,m=0.,sum=0;c、對(duì)形參中定義的指針變量進(jìn)行操作,使其指向鏈表表頭:temp=head->next;d、使用VC+中的拷貝函數(shù),將形參中str1的
17、值賦給Data:strcpy(Data,str1);e、利用循環(huán)進(jìn)行查找操作,核心算法為:if(temp->dataj)=Datak)k+;將輸入的查找字符與鏈表中信息比較,找到第一個(gè)相同的字符elseif(Datak!='0')j=j-k;k=0;/從主串第j-k個(gè)位置重新查找if(Datak='0')sum+;/此字符出現(xiàn)白次數(shù)加1j=j-k+1;/j記錄下該字符串出現(xiàn)的位置printf("tt第次出現(xiàn)在第d行第d列?尸+;l+;k=0;continue;temp=temp->next;指向下一行對(duì)文本內(nèi)容查找的部分完成。E)、Dele
18、teWord()文本內(nèi)容刪除函數(shù)此子函數(shù)是對(duì)文本內(nèi)容進(jìn)行刪除。具體偽碼算法如下:f、定義一個(gè)數(shù)組用來(lái)存儲(chǔ)需要?jiǎng)h除的字符或者字符串:charData20;g、定義指針變量:LinkList*temp,*term;h、定義整形變量用來(lái)控制行數(shù)、字符數(shù):inti,j,k,m,y,num;i、使用VC+中拷貝函數(shù)講形參中需要?jiǎng)h除的字符或字符串賦值給已定義的數(shù)組:strcpy(Data,str2);j、使用循環(huán)進(jìn)行刪除操作:其核心算法為:for(i=0;i<=NUM;i+)for(j=0;j<80;j+)if(temp->dataj)=Datak)k+;elseif(Datak!=
19、39;0')j=j-k;k=0;if(Datak='0')num=j;break;if(num<80)break;首先是使用循環(huán)查找到需要?jiǎng)h除字符或者字符串的字符數(shù)以及字符或者字符串的位置,以便于刪除;for(;i<=NUM;i+)for(;j<80;j+)if(j+1<k)term->data80-k+num=temp->dataj+1;/刪除的字符串不在最后一行,將下一行的字符(由temp指向)前移到前行elsetemp->dataj-k+1=temp->dataj+1;當(dāng)要?jiǎng)h除的字符串在最后一行只要將最后一行的字符前
20、移term=temp;temp=temp->next;j=0;/在使用循環(huán),從查找到的字符或者字符串開(kāi)始進(jìn)行刪除,在一行刪除完畢之后,轉(zhuǎn)至下一行進(jìn)行刪除。刪除部分到次完成。F)、InsertWord()文本內(nèi)容插入函數(shù)此函數(shù)為向文本中插入字符或者字符串。具體偽碼如下:a、定義需要插入的字符或者字符串的輸入數(shù)組:charData20;b、定義需要插入的字符或者字符串的插入的行和列:inth,l;c、進(jìn)行輸入操作,將上述兩個(gè)部分進(jìn)行輸入d、定義一個(gè)整形變量,確定插入的具體位置:inti=(h-1)*80+l;e、定義一指針變量:LinkList*a;f、對(duì)輸入的字符進(jìn)行插入操作,具體核心算法
21、如下:intn=strlen(Data);intm;intinsertRow=i/80+1;/確定插入位置的行數(shù)introw=temp->row;將全局變量記錄的行數(shù)賦值給rowintj;if(insertRow=row)/判斷插入位置是否在最后一行for(m=temp->length-1;m>=(i%80)&&n>0;m-)temp->datam+n=temp->datam;/將最后一行插入位置后面的所有字符向后移n位for(m=(i%80),j=0;m<n+(i%80);m+,j+)temp->datam=Dataj;/將要插
22、入的字符或者字符串賦值到要插入的位置else如果插入的位置不再最后一行intr=0;for(intp=insertRow;p<row;p+)if(p=insertRow)r=0;elser=n;for(m=temp->length-1-r;m>=0&&n>0;m-)temp->datam+n=temp->datam;/將最后一行整體后移n位a=temp;/p指向前一行temp=temp->pre;/temp指向前一位temp->length=80;for(m=temp->length-n,j=0;m<temp->
23、length;m+,j+)a->dataj=temp->datam;/將前一行后n個(gè)字符移到下一行的前n個(gè)字符位置for(m=temp->length-n-1;m>=(i%80);m-)temp->datam+n=temp->datam;/插入行位置后的字符后移n位for(m=(i%80),j=0;m<(i%80)+n;m+,j+)temp->datam=Dataj;/將要插入的字符賦值到插入的位置returntemp;E)、Bmenu()文本內(nèi)容處理菜單本函數(shù)為文本內(nèi)容處理菜單,即使用循環(huán)語(yǔ)句對(duì)文本內(nèi)容處理部分的子函數(shù)集中在此函數(shù)中。F)、He
24、adWord()、AboutWord()輸出信息函數(shù)這兩個(gè)子函數(shù)為本人自己另加的輸出程序信息的函數(shù);HeadWord()是將一標(biāo)題輸出在DOS節(jié)面的最上端;AboutWord()是顯示作者信息;G)、menu()main()主菜單函數(shù)以及主函數(shù);本人將主菜單單獨(dú)創(chuàng)建為一個(gè)子函數(shù),方便觀看。仍然是很簡(jiǎn)單的循環(huán)語(yǔ)句實(shí)現(xiàn)。主函數(shù)為:voidmain()head=(LinkList*)malloc(sizeof(LinkList);LinkList*temp;menu(temp);先為head申請(qǐng)存儲(chǔ)空間,然后創(chuàng)建指針變量temp,然后直接在主菜單函數(shù)中進(jìn)行其他操作。四、上機(jī)調(diào)試1、上機(jī)調(diào)試過(guò)程中遇到
25、的問(wèn)題及解決方法:a)由于本程序的操作大部分都為經(jīng)常使用的查找、刪除、插入,基本的算法及代碼都可以通過(guò)查找資料得到,故沒(méi)有出現(xiàn)多大的問(wèn)題。錯(cuò)誤主要是在于刪除及插入等子函數(shù)中復(fù)雜操作過(guò)程中出現(xiàn)的小問(wèn)題。b)刪除及插入過(guò)程中需要在子函數(shù)中定義一個(gè)數(shù)組變量,用來(lái)存儲(chǔ)輸入的信息,然后用來(lái)與鏈表中的信息進(jìn)行比較以達(dá)到刪除或者插入。另為達(dá)到將輸入的信息賦值給子函數(shù)中定義的數(shù)組,特使用了C+中的strcpy()函數(shù)。c)為了將程序界面更加的完美,做了3個(gè)菜單,還寫(xiě)了一個(gè)子函數(shù)專(zhuān)門(mén)將標(biāo)題顯示在程序最上端。清屏函數(shù)使用system("cls")。2、時(shí)間,空間性能分析:本算法的空間復(fù)雜度很低
26、,只需要文本的行數(shù)(NL1)*80+L(最后一行字符數(shù))的數(shù)組存放結(jié)果,因此空間復(fù)雜度為O(N)。但是本算法的時(shí)間復(fù)雜度比較高,由于輸出函數(shù)、查找函數(shù)算法時(shí)間復(fù)雜度均為O(N),但是刪除函數(shù)、插入函數(shù)算法的時(shí)間復(fù)雜度較高。但是,我暫時(shí)還問(wèn)想到時(shí)間復(fù)雜度更小的算法,因此在這里我無(wú)法對(duì)該算法進(jìn)行優(yōu)化。3、經(jīng)驗(yàn)和體會(huì):得到文本編輯器這一課程設(shè)計(jì)題目時(shí),自己還比較害怕是制作向windows系統(tǒng)中記事本一樣的程序??戳巳蝿?wù)書(shū)之后自己有了些欣慰,任務(wù)書(shū)上要求是對(duì)輸入的信息進(jìn)行操作,這是我們經(jīng)常練習(xí)的內(nèi)容,雖然是比平時(shí)練習(xí)的更為難,更有深度,但自己畢竟知道該向什么方向去努力,自己應(yīng)該如何去編寫(xiě)這個(gè)程序。所以
27、自己在整個(gè)課程設(shè)計(jì)過(guò)程中還是比較輕松的,編寫(xiě)過(guò)程中遇到的困難及問(wèn)題都通過(guò)查閱資料、向老師提問(wèn)得以解決。這都是基于對(duì)課題有一個(gè)明確的了解,清楚向什么方向去寫(xiě)。所以本次課程設(shè)計(jì)自己最大的體會(huì)就是不管寫(xiě)什么程序,自己首先得對(duì)這個(gè)問(wèn)題要分析透徹,要知道自己要干什么,然后才能讓自己干什么。五、測(cè)試結(jié)果及分析測(cè)試文章:Realbeautycomesfromlearning,growing,andlovinginthewaysoflife.ThatistheArtofLife.Youcanlearnslowly,andsometimespainfully,byjustwaitingforlifetohapp
28、entoyou.Oryoucanchoosetoaccelerateyourgrowthandintentionallydevourlifeandallitoffers.Youaretheartistthatpaintsyourfuturewiththebrushoftoday.運(yùn)行程序后:圖5程序主菜單按照注先選擇1號(hào)功能有:圖6文本輸入輸入完文字后退回到主菜單,然后選擇2號(hào)功能有:圖7當(dāng)前文本輸出返回后回到主菜單,然后選擇3號(hào)功能進(jìn)入文本內(nèi)容統(tǒng)計(jì)菜單有8*C:lDocu>entsandSettiiigsAd*iELi5七raturt桌面Debug簡(jiǎn)單的文本編輯器.exe數(shù)數(shù)數(shù)個(gè)個(gè)個(gè)的
29、的數(shù)的數(shù)母母?jìng)€(gè)號(hào)個(gè)數(shù)單統(tǒng)-W子的備受親系寫(xiě)寫(xiě)苫魯主本大小數(shù)標(biāo)一至所回出口口口口口口返退gieieit山接文文文文文文退笆”ri*12345678ME梵薜薜JME梵薜薜J梵薜薜J梵演犀ME請(qǐng)選擇需統(tǒng)計(jì)項(xiàng)目:圖8文章內(nèi)容統(tǒng)計(jì)菜單選擇1-6號(hào)功能有:。明*C:DocuMentsandEettingB'AdMiniBtrat口一桌面DebugfSj單的文本編輯器.exe歡迎使用簡(jiǎn)單的文本編輯器.按回車(chē)鍵繼續(xù)文章中標(biāo)點(diǎn)符號(hào)的個(gè)數(shù):15c::*C:Docu>entsandSettingsYAdMiTiistrator®VDebugfalMKeze梵XXJgMEMMMKMiKMMiJ
30、ifJfHX苴藏Jf箕藏acafMHXMiJifJf梵X箕第歡迎使用簡(jiǎn)里的文本編輯器接回車(chē)鍵繼續(xù)文章中空格的個(gè)數(shù):60WI:W歡迎使用簡(jiǎn)單的文本編輯器口岡5*C:Docu>entsandSettings'JuiBiridat/2七口工桌面鐘£1311名簡(jiǎn)單的文本編輯器.exeMMM胭4HH»MMMM胃M*4H<MXWHHHt文章中所有字?jǐn)?shù):TH找回車(chē)鍵繼續(xù)圖9統(tǒng)計(jì)各功能顯示結(jié)果如果選擇7回到主菜單,選擇8直接退出程序?;氐街鞑藛魏筮x擇4號(hào)功能有:C:DocumchltsandSett:Lng呂'AdMiLniiteltor1桌面*D仁bug簡(jiǎn)單的
31、文本編輯露oxe:歡迎使用簡(jiǎn)單的文本編輯器rfE昌呂呂爰本詈或成或容內(nèi)i章文jIs的的人章統(tǒng)年插文單系至雷蒙雷E3MAl主退找嬖示*文名f查刪向顯譽(yù),HMftJtJ1JH4t4c*4£*4MM*M清選擇;圖10文章內(nèi)容處理菜單選才i1后有:。三*C:WocuMentsandSetting£JLd>iiai£trator桌面'Debug、簡(jiǎn)單的文本編輯器.exe歡迎使用簡(jiǎn)單的文本編輯器請(qǐng)鈴您霆要查找的字符或字符串第一史芹莫1次出現(xiàn)在兔1行笄4列2次出現(xiàn)在篝2行割列3次出現(xiàn)在第布奈門(mén)列4次出現(xiàn)在第十第3列字符串息共出現(xiàn)次數(shù)為二4接回三鍵繼續(xù)圖11文本查找
32、結(jié)果選才i2后有:ca*C:Docuaentsand5匕1111163人(1»111131工&±門(mén)11桌面。©1111£1簡(jiǎn)單的文本編輯番,。©“日厘*歡迎使用簡(jiǎn)單的文本編輯器*前文章的內(nèi)容是:Realbeautycomesfrom,growing,andlouinginthewaysoflife.ThatisPhatisofLife.Voucanlearnsloulj-andsometimespainfully,byjustwaitingfoptingforhappentoyoli.Opyoucanchoosetoaccelerate
33、yolipgrowthandintention+*tentionuourlifeandallitoffers-Vouaretheartistthatpaintsyom*futurewWturewbrushtoday.按回車(chē)鍵繼續(xù).圖12文章刪除結(jié)果圖13文章插入結(jié)果全部結(jié)束后按5回主菜單,按6直接退出程序?;刂鞑藛魏筮x擇5有:c:Documentsand寫(xiě)©±±111名零且(1>111運(yùn)十1:石十口1:桌面皿(61111名簡(jiǎn)單的文本編輯器.及歡迎使用簡(jiǎn)單的文本編輯器關(guān)干1本系統(tǒng)由歐網(wǎng)絡(luò)工程(2)班范亞運(yùn)制作,謝謝使用I1-11UJ1_1U-1>1aru
34、jujIIi-iIIIi_iu_ribj1-Iuj1_Iu-i»»-11-j1u_i*«-ii_rflK口MUE-UE-W-同-H-IIE-H接回車(chē)鍵繼續(xù)圖14關(guān)于界面回主菜單選擇6后退出本程序。六、用戶使用說(shuō)明本程序是在VC+6.0中編寫(xiě),程序運(yùn)行環(huán)境:DOS根據(jù)程序的提示即可完成文本編輯器的各項(xiàng)功能。七、參考文獻(xiàn)1,王昆侖、李紅。數(shù)據(jù)結(jié)構(gòu)與算法。北京:中國(guó)鐵道出版社。八、附錄:#include"stdio.h"#include"malloc.h"#include"string.h"#include&q
35、uot;iostream.h"#include"stdlib.h"#include"conio.h"#defineLinkSize100intNUM,C,N;typedefstructlist(chardata80;intlength;structlist*next;structlist*pre;introw;LinkList;LinkList*head;voidHeadWord()(/system("cls");printf("tt*printf("tt*printf("tt*n")
36、;,*歡迎使用簡(jiǎn)單的文本編輯器*n");*n");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;i<80;i+)temp->datai='0'printf("開(kāi)始創(chuàng)建文本,請(qǐng)輸入文章(輸入#號(hào)結(jié)束):n");for(j=
37、0;j<Link_Size;j+)(for(i=0;i<80;i+)(ch=getchar();temp->datai=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;i<80;i+)tem
38、p->datai='0')temp->row=NUM+1;system("cls");returntemp;)voidPrintWord()inti,j;LinkList*p;p=head->next;system("cls");HeadWord();printf("n當(dāng)前文章的內(nèi)容是:");for(j=0;j<=NUM&&p!=NULL;j+)for(i=0;(i<80)&&(p->datai)!='#'i+)printf("
39、;%c",p->datai);)p=p->next;)voidCountWord()LinkList*temp;charch;inti,j,t;intWORD=0,word=0,space=0,num=0,punct=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')WO
40、RD+;elseif(ch>='a')&&(ch<='z')word+;elseif(ch>='0')&&(ch<='9')num+;elseif(ch='')space+;elseif(ch=3311ch=3411ch=3911ch=4411ch=4611ch=5811ch=5911ch=63)punct+;sum=WORD+word+num;while(1)printf("n");HeadWord();printf("tt*n
41、");printf("tt*文章內(nèi)容統(tǒng)計(jì)菜單*n");printf("tt*n");printf("tt*1、文章中大寫(xiě)字母的個(gè)數(shù)*n");printf("tt*2、文章中小寫(xiě)字母的個(gè)數(shù)*n");printf("tt*3、文章中數(shù)字的個(gè)數(shù)*n");printf("tt*4、文章中標(biāo)點(diǎn)符號(hào)的個(gè)數(shù)*n");printf("tt*5、文章中空格的個(gè)數(shù)*n");printf("tt*6、文早中所后字?jǐn)?shù)*n");printf("
42、;tt*7、退出返回主菜單*n");printf("tt*8、直接退出本系統(tǒng)*n");printf("tt*n");printf("tt請(qǐng)選擇需統(tǒng)計(jì)項(xiàng)目:");scanf("%d",&t);switch(t)case1:system("cls");HeadWord();printf("ntt文章中大寫(xiě)字母的個(gè)數(shù):dn",WORD);printf("按回車(chē)鍵繼續(xù)");getchar();getchar();system("cls&
43、quot;);break;case2:system("cls");HeadWord();printf("ntt文章中小寫(xiě)字母的個(gè)數(shù):dn",word);printf("按回車(chē)鍵繼續(xù)");getchar();getchar();system("cls");break;case3:system("cls");HeadWord();printf("ntt文章中數(shù)字的個(gè)數(shù):dn",num);printf("按回車(chē)鍵繼續(xù)");getchar();getchar();
44、system("cls");break;case4:system("cls");HeadWord();printf("ntt文章中標(biāo)點(diǎn)符號(hào)的個(gè)數(shù):dn",punct);printf("按回車(chē)鍵繼續(xù)");getchar();getchar();system("cls");break;case5:system("cls");HeadWord();printf("ntt文章中空格的個(gè)數(shù):dn",space);printf("按回車(chē)鍵繼續(xù)");
45、getchar();getchar();system("cls");break;case6:system("cls");HeadWord();printf("ntt文章中所有字?jǐn)?shù):dn",sum);printf("按回車(chē)鍵繼續(xù)");getchar();getchar();system("cls");break;)if(t=7)system("cls");break;if(t=8)exit(0);voidSearchWord(char*str1,LinkList*temp)ch
46、arData20;inti,j,k=0,sum=0;intl=1;temp=head->next;strcpy(Data,str1);for(i=0;i<=NUM;i+)for(j=0;j<80;j+)if(temp->dataj)=Datak)k+;elseif(Datak!='0')j=j-k;k=0;if(Datak='0')sum+;j=j-k+1;printf("tt第次出現(xiàn)在第%d行第d列n",l,i+1,j+1);l+;k=0;continue;temp=temp->next;printf(&quo
47、t;ttt字符串總共出現(xiàn)次數(shù)為:dnn",sum);C=sum;N=i*80+j;voidDeleteWord(char*str2)charData20;LinkList*temp,*term;inti,j,k,m,y,num;strcpy(Data,str2);for(y=0;y<C;y+)num=80;k=0,m=0;temp=head;for(i=0;i<=NUM;i+)term=temp;temp=temp->next;for(j=0;j<80;j+)if(temp->dataj)=Datak)k+;elseif(Datak!='0
48、9;)j=j-k;k=0;if(Datak='0')num=j;break;if(num<80)break;for(;i<=NUM;i+)for(;j<80;j+)if(j+1<k)term->data80-k+num=temp->dataj+1;elsetemp->dataj-k+1=temp->dataj+1;)term=temp;temp=temp->next;j=0;)LinkList*InsertWord(LinkList*temp)(charData20;inth,l;printf("ntt請(qǐng)輸入要插入
49、的字符或字符串:");getchar();gets(Data);printf("ntt當(dāng)前文章內(nèi)容為:");PrintWord();printf("ntt請(qǐng)輸入要插入的行:");scanf("%d",&h);printf("ntt請(qǐng)輸入要插入的列:");scanf("%d",&l);inti=(h-1)*80+l;LinkList*a;intn=strlen(Data);intm;intinsertRow=i/80+1;introw=temp->row;intj;
50、if(insertRow=row)(for(m=temp->length-1;m>=(i%80)&&n>0;m-)temp->datam+n=temp->datam;for(m=(i%80),j=0;m<n+(i%80);m+,j+)(temp->datam=Dataj;)else(intr=0;for(intp=insertRow;p<row;p+)(if(p=insertRow)r=0;elser=n;for(m=temp->length-1-r;m>=0&&n>0;m-)temp->d
51、atam+n=temp->datam;a=temp;temp=temp->pre;temp->length=80;for(m=temp->length-n,j=0;m<temp->length;m+,j+)a->dataj=temp->datam;for(m=temp->length-n-1;m>=(i%80);m-)temp->datam+n=temp->datam;for(m=(i%80),j=0;m<(i%80)+n;m+,j+)temp->datam=Dataj;returntemp;voidBmenu
52、(LinkList*temp)(charstr120;charstr220;inta;do(HeadWord();printf("ntt*n");printf("tt*文章內(nèi)容處理菜單*n");printf("tt*n");printf("tt*1、查找文章中的字符或者字符串*n");printf("tt*2、刪除文章中的字符或者字符串*n");printf("tt*3、1可文早中插入字符或者字符串*n");printf("tt*4、顯示當(dāng)前文章內(nèi)容*n");printf("tt*5、返回主菜單*n");printf("tt*6、直接退出系統(tǒng)*n");printf("tt*printf("tt*n");scanf("%d",&a);switch(a)(case1:system("cls");Head
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 度建筑鋼材供應(yīng)合同書(shū)
- 房屋共有權(quán)分割合同
- 房地產(chǎn)開(kāi)發(fā)施工合同范本
- 企業(yè)與運(yùn)營(yíng)商電路租賃合同模板
- 學(xué)生暑假旅游安全合同書(shū)
- 高端翡翠飾品購(gòu)銷(xiāo)合同協(xié)議書(shū)
- 員工餐廳服務(wù)合同協(xié)議
- 大數(shù)據(jù)分析與處理合同項(xiàng)目
- 廣州市房地產(chǎn)委托代理銷(xiāo)售合同(新版)
- 日用雜品跨境電商運(yùn)營(yíng)與管理考核試卷
- 教師如何進(jìn)行跨學(xué)科教學(xué)
- 數(shù)學(xué)-山東省濟(jì)寧市2023屆高三第一次模擬考試
- 2016-2023年蘇州信息職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年考點(diǎn)試題甄選合集含答案解析
- 生理學(xué)全套課件
- 機(jī)械設(shè)備操作培訓(xùn)模板
- 高二英語(yǔ)選修課件SectionⅢGrammar非限制性定語(yǔ)從句
- 盤(pán)口暗語(yǔ)及盤(pán)口數(shù)字語(yǔ)言
- 《新疆大學(xué)版學(xué)術(shù)期刊目錄》(人文社科)
- 職業(yè)病診斷鑒定申請(qǐng)書(shū)
- 培訓(xùn)課件熱身舞蹈
- 娛樂(lè)場(chǎng)所應(yīng)急處理預(yù)案
評(píng)論
0/150
提交評(píng)論