




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
資料范本本資料為word版本,可以直接編輯和打印,感謝您的下載數(shù)據(jù)結(jié)構(gòu)文本編輯器地點(diǎn): 時(shí)間: 說(shuō)明:本資料適用于約定雙方經(jīng)過(guò)談判,協(xié)商而共同承認(rèn),共同遵守的責(zé)任與義務(wù),僅供參考,文檔可直接下載或修改,不需要的部分可直接刪除,使用時(shí)請(qǐng)?jiān)敿?xì)閱讀內(nèi)容數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告需求分析題目及要求名稱:簡(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ù);統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);刪除某一字符或者子串,并將后面的字符前移。插入某一字符或者子串。查找某一字符或者子串。存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。輸出形式:分行輸出用戶輸入的各行字符;分4行輸出〃全部字母數(shù)〃、〃數(shù)字個(gè)數(shù)〃、〃空格個(gè)數(shù)〃、〃文章總字?jǐn)?shù)〃輸出刪除某一字符串后的文章。通過(guò)題目及其要求可知,本程序應(yīng)實(shí)現(xiàn)以下功能:文章內(nèi)容的輸入:包括字母、標(biāo)點(diǎn)符號(hào)、數(shù)字等;文章內(nèi)容的統(tǒng)計(jì):包括文章中大寫字母、小寫字母、數(shù)字、標(biāo)點(diǎn)符號(hào)、空格以及文章所有字?jǐn)?shù)的個(gè)數(shù)的統(tǒng)計(jì);文章內(nèi)容的處理:包括對(duì)文章內(nèi)容的查找、刪除以及對(duì)指定位置進(jìn)行插入操作,其中在查找的過(guò)程中統(tǒng)計(jì)出該字符或字符串在文章中出現(xiàn)的次數(shù);問(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)行匹配,大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)直接通過(guò)比較即可得到,標(biāo)點(diǎn)符號(hào)通過(guò)ASCII比較即可得到;對(duì)于文本內(nèi)容的處理,查找部分仍是使用循環(huán)對(duì)已存儲(chǔ)的文章進(jìn)行匹配,判斷需要查找的字符或者字符串是否與文章中某部分內(nèi)容相同,如果存在相同的記錄相同的個(gè)數(shù)及位置并輸出個(gè)數(shù)及位置。刪除部分先使用程序的查找功能對(duì)文章中需要?jiǎng)h除的字符或者字符串進(jìn)行查找,然后對(duì)其進(jìn)行刪除。插入部分為通過(guò)輸入的插入位置(行、列)將字符或者字符串插入到文章制定位置。二.概要設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)選擇:本程序是對(duì)輸入的文字進(jìn)行操作,故使用的數(shù)據(jù)結(jié)構(gòu)為單鏈表操作。根據(jù)第一部分的問(wèn)題分析有該鏈表操作有3部分:另有全局變量*head,作為文章的頭指針。故創(chuàng)建了以下結(jié)構(gòu)體:typedefstruct_list(chardata[80]; //記錄一行字符intlength; 〃記錄一行字符長(zhǎng)度struct_list*next;//后繼指針struct_list*pre;〃前趨指針introw; //記錄整篇文章的行數(shù)}LinkList;在文章內(nèi)容創(chuàng)建部分中使用線性表的鏈?zhǔn)酱鎯?chǔ),并使用全局變量對(duì)文本的各種信息進(jìn)行存儲(chǔ);文章的內(nèi)容統(tǒng)計(jì)、刪除、查找、插入都采用鏈表操作完成。本程序?yàn)閷⒉藛喂δ芡昝阑褂昧舜罅康膁owhile語(yǔ)句。概要設(shè)計(jì):程序框架:****************************************************TOC\o"1-5"\h\z**** 歡迎使用簡(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)功能********************************************************判斷123456文本內(nèi)容的輸入,CreatWord(),將文本內(nèi)容輸入到已申請(qǐng)的存儲(chǔ)空間中顯示函數(shù),PrintWord(),將當(dāng)前文本中內(nèi)容顯示出來(lái)文章內(nèi)容統(tǒng)計(jì)菜單,CountWord(),以菜單形式顯示給用戶,對(duì)文章的內(nèi)容進(jìn)行各種方式的統(tǒng)計(jì)文章內(nèi)容處理菜單,Bmenu(),這部分為一子菜單,使用了包括SearchWord()、DeleteWord()、InsertWord()三個(gè)函數(shù),對(duì)文章內(nèi)容進(jìn)行處理一個(gè)類似與作者信息的代碼,AboutWord(),顯示作者信息退出系統(tǒng)圖1簡(jiǎn)單的文本編輯器主框架************************************************** 文章內(nèi)容統(tǒng)計(jì)菜單 *****************************************************1、文章中大寫字母的個(gè)數(shù)********2、文章中小寫字母的個(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)*************************************************判斷統(tǒng)計(jì)文本中大寫字母?jìng)€(gè)數(shù)1統(tǒng)計(jì)文本中小寫字母?jìng)€(gè)數(shù)2統(tǒng)計(jì)文本中數(shù)字的個(gè)數(shù)3統(tǒng)計(jì)文本中標(biāo)點(diǎn)符號(hào)的個(gè)數(shù)4統(tǒng)計(jì)文本中空格的個(gè)數(shù)5統(tǒng)計(jì)文本所有字?jǐn)?shù)6返回到主菜單7直接退出系統(tǒng)8兩個(gè)子菜單:如選擇上圖中功能3,則有:圖2簡(jiǎn)單的文本編輯器----文本內(nèi)容統(tǒng)計(jì)菜單如選擇功能4,則有:**********************************************TOC\o"1-5"\h\z**** 文章內(nèi)容處理菜單 ***************************************************** 1、查找文章中的字符或者字符串 ******** 2、刪除文章中的字符或者字符串 ******** 3、向文章中插入字符或者字符串 ******** 4、顯示當(dāng)前文章內(nèi)容 ****
****5、返回主菜單********5、返回主菜單******** 6、直接退出系統(tǒng) *************************************************判斷123456使用子函數(shù)SearchWord(),對(duì)存儲(chǔ)在鏈表中的文本進(jìn)行字符或者字符串查找使用子函數(shù)DeleteWord(),對(duì)存儲(chǔ)在鏈表中文本進(jìn)行字符或者字符串的刪除使用子函數(shù)InsertWord(),對(duì)存儲(chǔ)在鏈表中的文本進(jìn)行字符或者字符串的插入使用函數(shù)PrintWord()將當(dāng)前文本信息顯示出來(lái)返回到主菜單繼續(xù)其他菜單結(jié)束整個(gè)程序圖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ì)函數(shù),實(shí)現(xiàn)上圖1菜單功能3,對(duì)存儲(chǔ)在鏈表中文本內(nèi)容進(jìn)行統(tǒng)計(jì),包括對(duì)文本內(nèi)容中的大寫字母、小寫字母、數(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()主菜單函數(shù),其結(jié)果為圖1所顯示部分,將1、2、3、4、8、9等函數(shù)集合。11、 main()主函數(shù)各函數(shù)關(guān)系用流程圖形式繪制如下:menuCreatWordCountWordBmenuSearchWordDeleteWordInsertWordAboutWordPrintWordEndmain圖4各函數(shù)之間的關(guān)系三.詳細(xì)設(shè)計(jì)定義單鏈表結(jié)點(diǎn)類型typedefstruct_list 〃行表結(jié)構(gòu)(chardata[80]; //記錄一行字符intlength; 〃記錄一行字符長(zhǎng)度struct_list*next;//后繼指針struct_list*pre;〃前趨指針introw; //記錄整篇文章的行數(shù)}LinkList;全局變量的定義intNUM,C,N;〃定義全局變量,Num用來(lái)記錄行號(hào),C用來(lái)記錄子串在主串中出現(xiàn)的總次數(shù)LinkList*head;//定義全局變量*head,文章首行頭指針各子函數(shù)的偽碼CreatWord()文本內(nèi)容輸入函數(shù)具體創(chuàng)建過(guò)程如下:定義LinkList指針變量*temp:LinkList*temp;定義文本輸入變量ch,記錄文本行數(shù)變量j,記錄每行字符數(shù)變量i;申請(qǐng)動(dòng)態(tài)存儲(chǔ)空間:head->next=(LinkList*)malloc(sizeof(LinkList));首行頭指針的前驅(qū)指針為空:head->pre=NULL;首行指針: temp二head->next;首行指針的前驅(qū)指針也為空:temp->pre=NULL;定義沒(méi)輸入字符時(shí)文章長(zhǎng)度為0: temp->length=0;初始化為字符串結(jié)束標(biāo)志,防止出現(xiàn)亂碼:for(i=0;i<80;i++)temp->data[i]='\0';利用循環(huán)進(jìn)行文本輸入for(j=0;j<LINK_INIT_SIZE;j++)//控制一頁(yè)(for(i=0;i<80;i++)〃控制一行(ch=getchar();//接收輸入字符temp->data[i]=ch;〃給temp指向的行賦值????temp->length++;//行中字符長(zhǎng)度加1if(ch=='#')(NUM=j;break;//文章結(jié)束時(shí),Num來(lái)記錄整個(gè)文章的行數(shù)}))在字符輸入的過(guò)程中,如果在單行輸入的字符超過(guò)了80個(gè)字符,則需要以下操作:輸入字符數(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->data[i]='\0';記錄整個(gè)文章的行數(shù):temp->row=NUM+1;返回指向最后一行指針:returntemp;文本輸入部分到此結(jié)束。、PrintWord()當(dāng)前文本輸出函數(shù)本子函數(shù)功能為將當(dāng)前存儲(chǔ)在鏈表中的文本信息輸出在屏幕上,具體偽碼算法如下:定義文本行數(shù)變量j,每行字符數(shù)i:inti,j;定義指針變量:LinkList*p;將指針p指向鏈表表頭:p=head->next;利用循環(huán)輸出鏈表中信息:for(j=0;j<=NUM&&p!二NULL;j++){=for(i=0;(i<80)&&(p->data[i])!='#';i++)(=printf("%c",p->data[i]);}p=p->next;}文本輸出函數(shù)到此結(jié)束。、CountWord()文本內(nèi)容統(tǒng)計(jì)函數(shù)本子函數(shù)是對(duì)文本中內(nèi)容進(jìn)行統(tǒng)計(jì)。具體偽碼算法如下:定義指針變量temp:LinkList*temp;定義記錄文本行數(shù)變量j,每行字符數(shù)i;定義記錄文本大寫字母數(shù)、小寫字母數(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;將指針temp指向鏈表表頭:temp=head->next;利用循環(huán)對(duì)鏈表中信息進(jìn)行匹配判斷,將大寫字母數(shù)、小寫字母數(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->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++;elseif(ch==33||ch==34||ch==39||ch==44||ch==46||ch==58||ch==59||ch==63){punct++;}}sum=WORD+word+num;}本程序?qū)y(tǒng)計(jì)項(xiàng)目設(shè)計(jì)了菜單提供給用戶選擇。菜單的編寫使用dowhile語(yǔ)句進(jìn)行循環(huán)操作,此部分不再多談。SearchWord()文本內(nèi)容查找函數(shù)本子函數(shù)是對(duì)文本內(nèi)容進(jìn)行查找并且對(duì)查找的內(nèi)容進(jìn)行統(tǒng)計(jì)其出現(xiàn)的次數(shù)。具體偽碼算法如下:定義一個(gè)數(shù)組,用來(lái)記錄需要查找的字符內(nèi)容:charData[20];定義定義文本行數(shù)變量j,每行字符數(shù)i,記錄字符出現(xiàn)的次數(shù)變量:inti,j,m=0.,sum=0;對(duì)形參中定義的指針變量進(jìn)行操作,使其指向鏈表表頭:temp=head->next;使用VC++中的拷貝函數(shù),將形參中strl的值賦給Data:strcpy(Data,str1);利用循環(huán)進(jìn)行查找操作,核心算法為:if((temp->data[j])==Data[k])k++;//將輸入的查找字符與鏈表中信息比較,找到第一個(gè)相同的字符elseif(Data[k]!='\0')(j=j-k;k=0;}//〃從主串第j-k個(gè)位置重新查找if(Data[k]=='\0')(sum++;//此字符出現(xiàn)的次數(shù)加1j=j-k+1;//j記錄下該字符串出現(xiàn)的位置printf("\t\t第%d次出現(xiàn)在第%d行第%d列\(zhòng)n",l,i+1,j+1);l++;k=0;continue;}temp二temp->next;//指向下一彳亍對(duì)文本內(nèi)容查找的部分完成。、DeleteWord()文本內(nèi)容刪除函數(shù)此子函數(shù)是對(duì)文本內(nèi)容進(jìn)行刪除。具體偽碼算法如下:定義一個(gè)數(shù)組用來(lái)存儲(chǔ)需要?jiǎng)h除的字符或者字符串:charData[20];定義指針變量:LinkList*temp,*term;定義整形變量用來(lái)控制行數(shù)、字符數(shù):inti,j,k,m,y,num;使用VC++中拷貝函數(shù)講形參中需要?jiǎng)h除的字符或字符串賦值給已定義的數(shù)組:strcpy(Data,str2);使用循環(huán)進(jìn)行刪除操作:其核心算法為:for(i=0;i<=NUM;i++)(for(j=0;j<80;j++)(if((temp->data[j])==Data[k])k++;elseif(Data[k]!='\0')(j=j-k;k=0;}if(Data[k]=='\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->data[80-k+num]=temp->data[j+1];}〃刪除的字符串不在最后一行,將下一行的字符(由temp指向)前移到前行elsetemp->data[j-k+1]=temp->data[j+1]; }〃當(dāng)要?jiǎng)h除的字符串在最后一行只要將最后一行的字符前移term=temp;temp=temp->next;j=0; }//在使用循環(huán),從查找到的字符或者字符串開(kāi)始進(jìn)行刪除,在一行刪除完畢之后,轉(zhuǎn)至下一行進(jìn)行刪除。刪除部分到次完成。、InsertWord()文本內(nèi)容插入函數(shù)此函數(shù)為向文本中插入字符或者字符串。具體偽碼如下:定義需要插入的字符或者字符串的輸入數(shù)組:charData[20];定義需要插入的字符或者字符串的插入的行和列:inth,l;進(jìn)行輸入操作,將上述兩個(gè)部分進(jìn)行輸入定義一個(gè)整形變量,確定插入的具體位置:inti=(h-1)*80+l;定義一指針變量:LinkList*a;對(duì)輸入的字符進(jìn)行插入操作,具體核心算法如下: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->data[m+n]=temp->data[m];//將最后一行插入位置后面的所有字符向后移n位for(m=(i%80),j=0;m<n+(i%80);m++,j++)(temp->data[m]=Data[j]; }//將要插入的字符或者字符串賦值到要插入的位置}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->data[m+n]=temp->data[m];//將最后一行整體后移n位a=temp;//p指向前一行temp=temp->pre;//temp指向前一位temp->length=80;for(m=temp->length-n,j=0;m<temp->length;m++,j++)a->data[j]=temp->data[m];}//將前一行后n個(gè)字符移到下一行的前n個(gè)字符位置for(m=temp->length-n-1;m>=(i%80);m--)temp->data[m+n]=temp->data[m];//插入行位置后的字符后移n位for(m=(i%80),j=0;m<(i%80)+n;m++,j++)temp->data[m]=Data[j];}//將要插入的字符賦值到插入的位置returntemp;}、Bmenu()文本內(nèi)容處理菜單本函數(shù)為文本內(nèi)容處理菜單,即使用循環(huán)語(yǔ)句對(duì)文本內(nèi)容處理部分的子函數(shù)集中在此函數(shù)中。、HeadWord()、AboutWord()輸出信息函數(shù)這兩個(gè)子函數(shù)為本人自己另加的輸出程序信息的函數(shù);Headword()是將一標(biāo)題輸出在DOS節(jié)面的最上端;AboutWord()是顯示作者信息;、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)行其他操作。調(diào)試分析上機(jī)調(diào)試過(guò)程中遇到的問(wèn)題及解決方法:由于本程序的操作大部分都為經(jīng)常使用的查找、刪除、插入,基本的算法及代碼都可以通過(guò)查找資料得到,故沒(méi)有出現(xiàn)多大的問(wèn)題。錯(cuò)誤主要是在于刪除及插入等子函數(shù)中復(fù)雜操作過(guò)程中出現(xiàn)的小問(wèn)題。刪除及插入過(guò)程中需要在子函數(shù)中定義一個(gè)數(shù)組變量,用來(lái)存儲(chǔ)輸入的信息,然后用來(lái)與鏈表中的信息進(jìn)行比較以達(dá)到刪除或者插入。另為達(dá)到將輸入的信息賦值給子函數(shù)中定義的數(shù)組,特使用了c++中的strcpy()函數(shù)。為了將程序界面更加的完美,做了3個(gè)菜單,還寫了一個(gè)子函數(shù)專門將標(biāo)題顯示在程序最上端。清屏函數(shù)使用system("cls")。時(shí)間,空間性能分析:本算法的空間復(fù)雜度很低,只需要文本的行數(shù)(N-1)*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)化。經(jīng)驗(yàn)和體會(huì):得到文本編輯器這一課程設(shè)計(jì)題目時(shí),自己還比較害怕是制作向windows系統(tǒng)中記事本一樣的程序??戳巳蝿?wù)書之后自己有了些欣慰,任務(wù)書上要求是對(duì)輸入的信息進(jìn)行操作,這是我們經(jīng)常練習(xí)的內(nèi)容,雖然是比平時(shí)練習(xí)的更為難,更有深度,但自己畢竟知道該向什么方向去努力,自己應(yīng)該如何去編寫這個(gè)程序。所以自己在整個(gè)課程設(shè)計(jì)過(guò)程中還是比較輕松的,編寫過(guò)程中遇到的困難及問(wèn)題都通過(guò)查閱資料、向老師提問(wèn)得以解決。這都是基于對(duì)課題有一個(gè)明確的了解,清楚向什么方向去寫。所以本次課程設(shè)計(jì)自己最大的體會(huì)就是不管寫什么程序,自己首先得對(duì)這個(gè)問(wèn)題要分析透徹,要知道自己要干什么,然后才能讓自己干什么。測(cè)試結(jié)果測(cè)試文章:Realbeautycomesfromlearning,growing,andlovinginthewaysoflife.ThatistheArtofLife.Youcanlearnslowly,andsometimespainfully,byjustwaitingforlifetohappento you. Oryoucan choose toaccelerateyour growthandintentionallydevourlifeandallitoffers.Youaretheartist that paintsyour future withthebrushof today.運(yùn)行程序后:圖5程序主菜單按照注先選擇1號(hào)功能有:圖6文本輸入輸入完文字后退回到主菜單,然后選擇2號(hào)功能有:圖7當(dāng)前文本輸出返回后回到主菜單,然后選擇3號(hào)功能進(jìn)入文本內(nèi)容統(tǒng)計(jì)菜單有:圖8文章內(nèi)容統(tǒng)計(jì)菜單選擇1-6號(hào)功能有:圖9統(tǒng)計(jì)各功能顯示結(jié)果如果選擇7回到主菜單,選擇8直接退出程序?;氐街鞑藛魏筮x擇4號(hào)功能有:圖10文章內(nèi)容處理菜單選擇1后有:圖11文本查找結(jié)果選擇2后有:圖12文章刪除結(jié)果選擇3后有:圖13文章插入結(jié)果全部結(jié)束后按5回主菜單,按6直接退出程序?;刂鞑藛魏筮x擇5有:圖14關(guān)于界面回主菜單選擇6后退出本程序。程序完整代碼#include"stdio.h"#includemalloc.h#include"string.h"#include"iostream.h#include"stdlib.h"#include"conio.h"#defineLink_Size100intNUM,C,N;typedefstructlist(chardata[80];intlength;structlist*next;structlist*pre;introw;}LinkList;LinkList*head;voidHeadWord()(//system("cls");piinti(\t\t****************************************************\n");printf("\t\t**** 歡迎使用簡(jiǎn)單的文本編輯器****\n");printf(\t\t****************************************************\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->data[i]='\0';printf("開(kāi)始創(chuàng)建文本,請(qǐng)輸入文章(輸入#號(hào)結(jié)束):\n");for(j=0;j<Link_Size;j++)(for(i=0;i<80;i++)(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;i<80;i++)temp->data[i]='\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->data[i])!='#';i++)(printf("%c",p->data[i]);}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->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++;elseif(ch==33||ch==34||ch==39||ch==44||ch==46||ch==58||ch==59||ch==63){punct++;}}sum=WORD+word+num;}while(1)printf(〃\n〃);HeadWord();printf(\t\t****************************************************\n");printf("\t\t********\n");文章內(nèi)容統(tǒng)計(jì)菜單printf(\t\t****************************************************\n");printf("\t\t********\n");1、文章中大寫字母的個(gè)數(shù)printf("\t\t********\n");2、文章中小寫字母的個(gè)數(shù)printf("\t\t********\n");3、文章中數(shù)字的個(gè)數(shù)printf("\t\t********\n");4、文章中標(biāo)點(diǎn)符號(hào)的個(gè)數(shù)printf("\t\t********\n");5、文章中空格的個(gè)數(shù)printf("\t\t********\n");6、文章中所有字?jǐn)?shù)printf("\t\t********\n");7、退出返回主菜單printf("\t\t********\n");8、直接退出本系統(tǒng)printf(\t\t****************************************************\n");printf("\t\t請(qǐng)選擇需統(tǒng)計(jì)項(xiàng)目:");scanf(〃%d〃,&t);switch(t)(case1:system("cls");HeadWord();printf("\n\t\t文章中大寫字母的個(gè)數(shù):%d\n”,WORD);printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;case2:system("cls");HeadWord();printf("\n\t\t文章中小寫字母的個(gè)數(shù):%d\n”,word);printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;case3:system("cls");HeadWord();printf("\n\t\t文章中數(shù)字的個(gè)數(shù):%d\n”,num);printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;case4:system("cls");HeadWord();printf("\n\t\t文章中標(biāo)點(diǎn)符號(hào)的個(gè)數(shù):%d\n”,punct);printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;case5:system("cls");HeadWord();printf("\n\t\t文章中空格的個(gè)數(shù):%d\n”,space);printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;case6:system("cls");HeadWord();printf("\n\t\t文章中所有字?jǐn)?shù):%d\n”,sum);printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;}if(t==7)(system("cls");break;}if(t==8)exit(0);}}voidSearchWord(char*str1,LinkList*temp)(charData[20];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->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第%d次出現(xiàn)在第%d行第%d列\(zhòng)n",l,i+1,j+1);l++;k=0;continue;}}temp二temp->next;}printf("\t\t\t字符串總共出現(xiàn)次數(shù)為:%d\n\n”,sum);C=sum;N=i*80+j;}voidDeleteWord(char*str2)(charData[20];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->data[j])==Data[k])k++;elseif(Data[k]!='\0')(j=j-k;k=0;}if(Data[k]=='\0')(num=j;break;}}if(num<80)break;}for(;i<=NUM;i++)(if(j+1<k)(term->data[80-k+num]=temp->data[j+1];}elsetemp->data[j-k+1]=temp->data[j+1];}term二temp;temp二temp->next;j=0;}}}LinkList*InsertWord(LinkList*temp)(charData[20];inth,l;printf("\n\t\t請(qǐng)輸入要插入的字符或字符串:");getchar();gets(Data);printf("\n\t\t當(dāng)前文章內(nèi)容為:");PrintWord();printf("\n\t\t請(qǐng)輸入要插入的行:");scanf(〃%d〃,&h);printf("\n\t\t請(qǐng)輸入要插入的列:");scanf(〃%d〃,&l);inti=(h-1)*80+l;LinkList*a;intn=strlen(Data);intm;intinsertRow=i/80+1;introw二temp->row;intj;if(insertRow==row)(for(m=temp->length-1;m>=(i%80)&&n>0;m--)temp->data[m+n]=temp->data[m];for(m=(i%80),j=0;m<n+(i%80);m++,j++)(temp->data[m]=Data[j];}}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->data[m+n]=temp->data[m];a=temp;temp=temp->pre;temp->length=80;for(m=temp->length-n,j=0;m<temp->length;m++,j++)a->data[j]=temp->data[m];}for(m=temp->length-n-1;m>=(i%80);m--)temp->data[m+n]=temp->data[m];for(m=(i%80),j=0;m<(i%80)+n;m++,j++)temp->data[m]=Data[j];}returntemp;}voidBmenu(LinkList*temp)(charstr1[20];charstr2[20];inta;do(HeadWord();printf("\n\t\t***************************************************printf(〃\t\t****文章內(nèi)容處理菜單printf(〃\t\t****文章內(nèi)容處理菜單****\n");printf(\t\t****************************************************\n〃);printf(〃\t\t**** 1、printf(〃\t\t**** 1、****\n〃);printf(〃\t\t**** 2、****\n〃);printf(〃\t\t**** 3、****\n〃);printf(〃\t\t**** 4、****\n〃);printf(〃\t\t**** 5、****\n〃);printf(〃\t\t**** 6、查找文章中的字符或者字符串刪除文章中的字符或者字符串向文章中插入字符或者字符串顯示當(dāng)前文章內(nèi)容返回主菜單直接退出系統(tǒng)****\n〃);printf(\t\t****************************************************\n〃);printf(〃\t\t請(qǐng)選擇:〃);scanf(〃%d〃,&a);switch(a)case1:system(〃cls〃);HeadWord();printf("\t\t\t請(qǐng)輸入您需要查找的字符或字符串:");getchar();gets(str1);SearchWord(str1,temp);printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;case2:system("cls");HeadWord();printf("\t\t\t請(qǐng)輸入您需要?jiǎng)h除的字符或字符串:");getchar();gets(str2);SearchWord(str2,temp);DeleteWord(str2);printf("\t\t\t刪除%s后的文章為:〃,str2);PrintWord();printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;system("cls");HeadWord();InsertWord(temp);printf("\t\t\t插入字符或字符串后文章為:");PrintWord();printf("按回車鍵繼續(xù) ");getchar();getchar();system("cls");break;case4:system("cls");HeadWord();PrintWord();printf("按回車鍵繼續(xù) ");get
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄉(xiāng)村振興產(chǎn)業(yè)基地項(xiàng)目資金需求與融資方案
- 數(shù)創(chuàng)產(chǎn)業(yè)園競(jìng)爭(zhēng)分析與市場(chǎng)定位
- 淮安僑新新材料科技有限公司介紹企業(yè)發(fā)展分析報(bào)告模板
- 購(gòu)銷合同范本建筑
- 中國(guó)工業(yè)制冰機(jī)行業(yè)市場(chǎng)全景調(diào)研及投資規(guī)劃建議報(bào)告
- 彩棉拉棕床墊行業(yè)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究分析報(bào)告
- 租地養(yǎng)鴨合同范本
- 結(jié)直腸癌造口患者需要注意這些
- 展覽毯行業(yè)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究分析報(bào)告
- 快遞倉(cāng)儲(chǔ)合同范本
- 汽車維修合同管理制度
- 劍橋KET詞匯表(中英對(duì)照)
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- (完整)低壓配電柜技術(shù)規(guī)范
- 《通信原理》樊昌信曹麗娜編著第六版課件
- 《書籍裝幀設(shè)計(jì)》 課件 項(xiàng)目2 書籍裝幀設(shè)計(jì)要素
- 妊娠期合并癥婦女的護(hù)理-妊娠合并心臟病的護(hù)理(婦產(chǎn)科護(hù)理課件)4EX
- 中職語(yǔ)文高教版基礎(chǔ)模塊上冊(cè)《風(fēng)景談》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 汪小蘭有機(jī)化學(xué)課件第四版
- Unit1 My day 單元作業(yè)設(shè)計(jì)(素材)人教PEP版英語(yǔ)五年級(jí)下冊(cè)
- 贏的思考與態(tài)度課件
評(píng)論
0/150
提交評(píng)論