數(shù)據(jù)結(jié)構(gòu)文本編輯器_第1頁
數(shù)據(jù)結(jié)構(gòu)文本編輯器_第2頁
數(shù)據(jù)結(jié)構(gòu)文本編輯器_第3頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告一 需求分析題目及要求名稱:簡單的文本編輯器內(nèi)容:輸入一頁文字,程序可以統(tǒng)計出文字、數(shù)字、空格的個數(shù)。靜態(tài)存儲一頁文章,每行最多不超過80個字符,共N行。要求:(1)分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù);(2)統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);(3)刪除某一字符或者子串,并將后面的字符前移。(4)插入某一字符或者子串。(5)查找某一字符或者子串。存儲結(jié)構(gòu)使用線性表,分別用幾個子函數(shù)實現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點符號。輸出形式:(1)分行輸出用戶輸入的各行字符;(2)分4行輸出"全部字母

2、數(shù)"、"數(shù)字個數(shù)"、"空格個數(shù)"、"文章總字?jǐn)?shù)"(3)輸出刪除某一字符串后的文章。通過題目及其要求可知,本程序應(yīng)實現(xiàn)以下功能:(1) 文章內(nèi)容的輸入:包括字母、標(biāo)點符號、數(shù)字等;(2) 文章內(nèi)容的統(tǒng)計:包括文章中大寫字母、小寫字母、數(shù)字、標(biāo)點符號、空格以 及文章所有字?jǐn)?shù)的個數(shù)的統(tǒng)計;(3) 文章內(nèi)容的處理:包括對文章內(nèi)容的查找、刪除以及對指定位置進(jìn)行插入操作, 其中在查找的過程中統(tǒng)計出該字符或字符串在文章中出現(xiàn)的次數(shù);問題分析本程序是對一段英文文章的內(nèi)容進(jìn)行處理,存儲方式采用鏈?zhǔn)酱鎯?,沒有文件操作,故本程序?qū)ζ湮谋緝?nèi)容的所有

3、操作都是在鏈表中進(jìn)行的。對于文本的輸入,采用頭插法將文本信息存儲到鏈表已申請好的存儲空間中,在此部分設(shè)計中最大的問題在于輸入文章過程中輸入的字符數(shù)大于80時如何換行;對于文本內(nèi)容的統(tǒng)計,使用循環(huán)對已存儲的文章進(jìn)行匹配,大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)直接通過比較即可得到,標(biāo)點符號通過ASC比較即可得到;對于文本內(nèi)容的處理,查找部分仍是使用循環(huán)對已存儲的文章進(jìn)行匹配,判斷需要查找的字符或者字符串是否與文章中某部分內(nèi)容相同,如果存在相同的記錄相同的個數(shù)及位置并輸出個數(shù)及位置。刪除部分先使用程序的查找功能對文章中需要刪除的字符或者字符串進(jìn)行查找,然后對其進(jìn)行刪除。插入部分為通過輸入的插入位置(

4、行、列)將字符或者字符串插入到文章制定位置。二概要設(shè)計數(shù)據(jù)結(jié)構(gòu)選擇:本程序是對輸入的文字進(jìn)行操作,故使用的數(shù)據(jù)結(jié)構(gòu)為單鏈表操作。根據(jù)第一部分的問題分析有該鏈表操作有3部分:PreTempNext另有全局變量*head,作為文章的頭指針。故創(chuàng)建了以下結(jié)構(gòu)體:typedef struct _list char data80;/記錄一行字符int length;/記錄一行字符長度 struct _list *next;/ 后繼指針struct _list *pre;/前趨指針int row;/記錄整篇文章的行數(shù)LinkList;在文章內(nèi)容創(chuàng)建部分中使用線性表的鏈?zhǔn)酱鎯?,并使用全局變量對文本的各種信息

5、進(jìn)行存儲;文章的內(nèi)容統(tǒng)計、刪除、查找、插入都采用鏈表操作完成。本程序為將菜單功能完美化,使用了大量的do while 語句。概要設(shè)計:程序框架:* 歡迎使用簡單的文本編輯器 * 主菜單 * 1、輸入文本內(nèi)容 * 2、顯示當(dāng)前文本內(nèi)容 * 3、文本內(nèi)容統(tǒng)計菜單 * * 4、文本內(nèi)容處理菜單 * 5、關(guān)于 * 6、退出本系統(tǒng) * 注:第一次使用本系統(tǒng)時請選擇1號功能 *判斷123456文本內(nèi)容的輸入,CreatWord(),將文本內(nèi)容輸入到已申請的存儲空間中顯示函數(shù),PrintWord(),將當(dāng)前文本中內(nèi)容顯示出來文章內(nèi)容統(tǒng)計菜單,CountWord(),以菜單形式顯示給用戶,對文章的內(nèi)容進(jìn)行各種

6、方式的統(tǒng)計文章內(nèi)容處理菜單,Bmenu(),這部分為一子菜單,使用了包括SearchWord()、DeleteWord()、InsertWord()三個函數(shù),對文章內(nèi)容進(jìn)行處理一個類似與作者信息的代碼,AboutWord(),顯示作者信息退出系統(tǒng)圖1 簡單的文本編輯器主框架* 文章內(nèi)容統(tǒng)計菜單 * 1、文章中大寫字母的個數(shù) * 2、文章中小寫字母的個數(shù) * 3、文章中數(shù)字的個數(shù) * 4、文章中標(biāo)點符號的個數(shù) * 5、文章中空格的個數(shù) * 6、文章中所有字?jǐn)?shù) * 7、退出返回主菜單 * 8、直接退出本系統(tǒng) * *判斷統(tǒng)計文本中大寫字母個數(shù)1統(tǒng)計文本中小寫字母個數(shù)2統(tǒng)計文本中數(shù)字的個數(shù)3統(tǒng)計文本中

7、標(biāo)點符號的個數(shù)4統(tǒng)計文本中空格的個數(shù)5統(tǒng)計文本所有字?jǐn)?shù)6返回到主菜單7直接退出系統(tǒng)8兩個子菜單:如選擇上圖中功能3,則有:圖2 簡單的文本編輯器-文本內(nèi)容統(tǒng)計菜單如選擇功能4,則有:* 文章內(nèi)容處理菜單 * 1、查找文章中的字符或者字符串 * 2、刪除文章中的字符或者字符串 * 3、向文章中插入字符或者字符串 * 4、顯示當(dāng)前文章內(nèi)容 * 5、返回主菜單 * 6、直接退出系統(tǒng) *判斷123456使用子函數(shù)SearchWord(),對存儲在鏈表中的文本進(jìn)行字符或者字符串查找使用子函數(shù)DeleteWord(),對存儲在鏈表中文本進(jìn)行字符或者字符串的刪除使用子函數(shù)InsertWord(),對存儲在鏈

8、表中的文本進(jìn)行字符或者字符串的插入使用函數(shù)PrintWord()將當(dāng)前文本信息顯示出來返回到主菜單繼續(xù)其他菜單結(jié)束整個程序圖3 簡單的文本編輯器-文本內(nèi)容處理菜單根據(jù)以上各圖,本程序共設(shè)計了11個函數(shù)。1、HeadWord() 標(biāo)題函數(shù),即一個輸出標(biāo)題,永遠(yuǎn)出現(xiàn)在程序的最頂端。2、CreatWord() 文本輸入函數(shù),實現(xiàn)上圖1菜單功能1,對文本的內(nèi)容進(jìn)行輸入;3、PrintWord() 當(dāng)前文本內(nèi)容輸出函數(shù),實現(xiàn)上圖1菜單功能2以及圖3中功能4,將當(dāng)前存儲在鏈表中的文本內(nèi)容輸出;4、CountWord() 文章內(nèi)容統(tǒng)計函數(shù),實現(xiàn)上圖1菜單功能3,對存儲在鏈表中文本內(nèi)容進(jìn)行統(tǒng)計,包括對文本內(nèi)容

9、中的大寫字母、小寫字母、數(shù)字、標(biāo)點符號、空格以及文章所有字?jǐn)?shù)的個數(shù)的統(tǒng)計;圖2是對其完整描述;5、SearchWord() 文章內(nèi)容查找函數(shù),實現(xiàn)上圖3菜單功能1中查找部分;6、DeleteWord() 文章內(nèi)容刪除函數(shù),實現(xiàn)上圖3菜單功能2中刪除部分;7、InsertWord() 文章內(nèi)容插入函數(shù),實現(xiàn)上圖3菜單功能3中插入部分;8、Bmenu() 第二子菜單函數(shù),實現(xiàn)上圖1菜單功能4,圖3是此函數(shù)實現(xiàn)的結(jié)果,它將5、6、7各子函數(shù)集合在此函數(shù)中;9、AboutWord() 顯示作者信息的函數(shù),實現(xiàn)上圖1菜單功能5。10、menu() 主菜單函數(shù),其結(jié)果為圖1所顯示部分,將1、2、3、4、8

10、、9等函數(shù)集合。11、main()主函數(shù)各函數(shù)關(guān)系用流程圖形式繪制如下:menuCreatWordCountWordBmenuSearchWordDeleteWordInsertWordAboutWordPrintWordEndmain圖4各函數(shù)之間的關(guān)系三詳細(xì)設(shè)計1、 定義單鏈表結(jié)點類型 typedef struct _list/行表結(jié)構(gòu) char data80;/記錄一行字符int length;/記錄一行字符長度 struct _list *next;/ 后繼指針struct _list *pre;/前趨指針int row;/記錄整篇文章的行數(shù)LinkList;2、 全局變量的定義int

11、 NUM,C,N; /定義全局變量,Num用來記錄行號,C用來記錄子串在主串中出現(xiàn)的總次數(shù)LinkList *head; /定義全局變量*head,文章首行頭指針3、 各子函數(shù)的偽碼A) CreatWord()文本內(nèi)容輸入函數(shù)具體創(chuàng)建過程如下: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;首行指針: te

12、mp=head->next;首行指針的前驅(qū)指針也為空: temp->pre=NULL;定義沒輸入字符時文章長度為0: temp->length=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+)/ 控制一頁 for(i=0;i<80;i+) /控制一行 ch=getchar(); /接收輸入字符 temp->datai=ch; /給temp指向的行賦值···

13、83;temp->length+;/行中字符長度加1 if(ch='*') NUM=j; break; /文章結(jié)束時,Num來記錄整個文章的行數(shù) 在字符輸入的過程中,如果在單行輸入的字符超過了80個字符,則需要以下操作 :輸入字符數(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<

14、80;i+) temp->datai='0'記錄整個文章的行數(shù):temp->row=NUM+1;返回指向最后一行指針:return temp;文本輸入部分到此結(jié)束。B)、PrintWord()當(dāng)前文本輸出函數(shù)本子函數(shù)功能為將當(dāng)前存儲在鏈表中的文本信息輸出在屏幕上,具體偽碼算法如下:a、 定義文本行數(shù)變量j,每行字符數(shù)i:int i,j;b、 定義指針變量:LinkList *p;c、 將指針p指向鏈表表頭: p=head->next;d、 利用循環(huán)輸出鏈表中信息: for(j=0;j<=NUM&&p!=NULL;j+)=for(i=0;(

15、i<80)&&(p->datai)!='*'i+)=printf("%c",p->datai);p=p->next; 文本輸出函數(shù)到此結(jié)束。C)、CountWord() 文本內(nèi)容統(tǒng)計函數(shù)本子函數(shù)是對文本中內(nèi)容進(jìn)行統(tǒng)計。具體偽碼算法如下:a、 定義指針變量temp:LinkList *temp;b、 定義記錄文本行數(shù)變量j,每行字符數(shù)i;c、 定義記錄文本大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)、標(biāo)點數(shù)和總字?jǐn)?shù)的變量:int WORD=0,word=0,space=0,num=0,punct=0,sum=0;d、 將指針t

16、emp指向鏈表表頭:temp=head->next;e、 利用循環(huán)對鏈表中信息進(jìn)行匹配判斷,將大寫字母數(shù)、小寫字母數(shù)、空格數(shù)、數(shù)字?jǐn)?shù)、標(biāo)點數(shù)和總字?jǐn)?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+; else if(ch>='a')&&(ch<='z')

17、 word+; else if(ch>='0')&&(ch<='9') num+; else if(ch=' ') space+; elseif(ch=33|ch=34|ch=39|ch=44|ch=46|ch=58|ch=59|ch=63)punct+; sum=WORD+word+num; f、 本程序?qū)y(tǒng)計項目設(shè)計了菜單提供給用戶選擇。菜單的編寫使用do while語句進(jìn)行循環(huán)操作,此部分不再多談。D)SearchWord( ) 文本內(nèi)容查找函數(shù) 本子函數(shù)是對文本內(nèi)容進(jìn)行查找并且對查找的內(nèi)容進(jìn)行統(tǒng)計其出現(xiàn)的次數(shù)。

18、 具體偽碼算法如下:a、 定義一個數(shù)組,用來記錄需要查找的字符內(nèi)容:char Data20;b、 定義定義文本行數(shù)變量j,每行字符數(shù)i,記錄字符出現(xiàn)的次數(shù)變量:int i,j,m=0.,sum=0;c、 對形參中定義的指針變量進(jìn)行操作,使其指向鏈表表頭:temp=head->next;d、 使用VC+中的拷貝函數(shù),將形參中str1的值賦給Data:strcpy(Data,str1);e、 利用循環(huán)進(jìn)行查找操作,核心算法為:if(temp->dataj)=Datak) k+;/將輸入的查找字符與鏈表中信息比較,找到第一個相同的字符 else if(Datak!='0'

19、)j=j-k;k=0; / /從主串第j-k個位置重新查找 if(Datak='0') sum+;/此字符出現(xiàn)的次數(shù)加1j=j-k+1; /j記錄下該字符串出現(xiàn)的位置 printf("tt第%d次出現(xiàn)在第%d行第%d列n",l,i+1,j+1);l+;k=0;continue; temp=temp->next; /指向下一行 對文本內(nèi)容查找的部分完成。E)、DeleteWord( ) 文本內(nèi)容刪除函數(shù)此子函數(shù)是對文本內(nèi)容進(jìn)行刪除。具體偽碼算法如下:f、 定義一個數(shù)組用來存儲需要刪除的字符或者字符串:char Data20;g、 定義指針變量:LinkL

20、ist *temp,*term;h、 定義整形變量用來控制行數(shù)、字符數(shù):int i,j,k,m,y,num;i、 使用VC+中拷貝函數(shù)講形參中需要刪除的字符或字符串賦值給已定義的數(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+; else if(Datak!='0') j=j-k;k=0; if(Datak='0') num=j;break; if(num<80) break; 首先

21、是使用循環(huán)查找到需要刪除字符或者字符串的字符數(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)要刪除的字符串在最后一行只要將最后一行的字符前移term=temp; temp=temp->next;j=0;/在使用循環(huán),從查找到的字符或者字符串開始進(jìn)行刪除,在一行刪除完畢

22、之后,轉(zhuǎn)至下一行進(jìn)行刪除。刪除部分到次完成。F)、InsertWord() 文本內(nèi)容插入函數(shù)此函數(shù)為向文本中插入字符或者字符串。具體偽碼如下:a、 定義需要插入的字符或者字符串的輸入數(shù)組:char Data20;b、 定義需要插入的字符或者字符串的插入的行和列:int h,l;c、 進(jìn)行輸入操作,將上述兩個部分進(jìn)行輸入d、 定義一個整形變量,確定插入的具體位置: int i=(h-1)*80+l;e、 定義一指針變量:LinkList *a;f、 對輸入的字符進(jìn)行插入操作,具體核心算法如下:int n=strlen(Data);int m ;int insertRow=i/80+1;/確定插入

23、位置的行數(shù)int row=temp->row;/將全局變量記錄的行數(shù)賦值給rowint j;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;/將要插入的字符或者字符串賦值到要插入的位置 else/如果插入的位置不再最后一行int r=0;for

24、(int p=insertRow; p<row;p+)if(p = insertRow) r=0;else r=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->length;m+,j+)a->dataj=temp-&g

25、t;datam; /將前一行后n個字符移到下一行的前n個字符位置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;/將要插入的字符賦值到插入的位置return temp;E)、Bmenu()文本內(nèi)容處理菜單 本函數(shù)為文本內(nèi)容處理菜單,即使用循環(huán)語句對文本內(nèi)容處理部分的子函數(shù)集中在此函數(shù)中。F)、HeadWord()、AboutWord() 輸出信息函

26、數(shù) 這兩個子函數(shù)為本人自己另加的輸出程序信息的函數(shù); HeadWord()是將一標(biāo)題輸出在DOS節(jié)面的最上端; AboutWord()是顯示作者信息;G)、menu() main() 主菜單函數(shù)以及主函數(shù); 本人將主菜單單獨創(chuàng)建為一個子函數(shù),方便觀看。仍然是很簡單的循環(huán)語句實現(xiàn)。主函數(shù)為:void main()head=(LinkList *)malloc(sizeof(LinkList);LinkList *temp;menu(temp);先為head申請存儲空間,然后創(chuàng)建指針變量temp,然后直接在主菜單函數(shù)中進(jìn)行其他操作。四調(diào)試分析1、 上機(jī)調(diào)試過程中遇到的問題及解決方法:a) 由于本程

27、序的操作大部分都為經(jīng)常使用的查找、刪除、插入,基本的算法及代碼都可以通過查找資料得到,故沒有出現(xiàn)多大的問題。錯誤主要是在于刪除及插入等子函數(shù)中復(fù)雜操作過程中出現(xiàn)的小問題。b) 刪除及插入過程中需要在子函數(shù)中定義一個數(shù)組變量,用來存儲輸入的信息,然后用來與鏈表中的信息進(jìn)行比較以達(dá)到刪除或者插入。另為達(dá)到將輸入的信息賦值給子函數(shù)中定義的數(shù)組,特使用了c+中的strcpy()函數(shù)。c) 為了將程序界面更加的完美,做了3個菜單,還寫了一個子函數(shù)專門將標(biāo)題顯示在程序最上端。清屏函數(shù)使用system(“cls”)。2、 時間,空間性能分析:本算法的空間復(fù)雜度很低,只需要文本的行數(shù)(N1)*80+L(最后一

28、行字符數(shù))的數(shù)組存放結(jié)果,因此空間復(fù)雜度為O(N)。但是本算法的時間復(fù)雜度比較高,由于輸出函數(shù)、查找函數(shù)算法時間復(fù)雜度均為O(N),但是刪除函數(shù)、插入函數(shù)算法的時間復(fù)雜度較高。但是,我暫時還問想到時間復(fù)雜度更小的算法,因此在這里我無法對該算法進(jìn)行優(yōu)化。3、 經(jīng)驗和體會:得到文本編輯器這一課程設(shè)計題目時,自己還比較害怕是制作向windows系統(tǒng)中記事本一樣的程序??戳巳蝿?wù)書之后自己有了些欣慰,任務(wù)書上要求是對輸入的信息進(jìn)行操作,這是我們經(jīng)常練習(xí)的內(nèi)容,雖然是比平時練習(xí)的更為難,更有深度,但自己畢竟知道該向什么方向去努力,自己應(yīng)該如何去編寫這個程序。所以自己在整個課程設(shè)計過程中還是比較輕松的,編寫

29、過程中遇到的困難及問題都通過查閱資料、向老師提問得以解決。這都是基于對課題有一個明確的了解,清楚向什么方向去寫。所以本次課程設(shè)計自己最大的體會就是不管寫什么程序,自己首先得對這個問題要分析透徹,要知道自己要干什么,然后才能讓自己干什么。五測試結(jié)果測試文章:Real beauty comes from learning, growing, and loving in the ways of life. That is the Art

30、60;of Life. You can learn slowly, and sometimes painfully, by just waiting for life to happen to you. Or you can choose to accelerate your growth and intentionally&#

31、160;devour life and all it offers. You are the artist that paints your future with the brush of today. 運行程序后:圖5 程序主菜單按照注先選擇1號功能有:圖6 文本輸入輸入完文字后退回到主菜單,然后選擇2號功能有:圖7 當(dāng)前文本輸出返回后回到主菜單,然后選擇3號功能進(jìn)入文本內(nèi)容統(tǒng)計菜單有:圖8 文章內(nèi)容統(tǒng)

32、計菜單選擇1-6號功能有:圖 9 統(tǒng)計各功能顯示結(jié)果如果選擇7回到主菜單,選擇8直接退出程序。回到主菜單后選擇4號功能有:圖10 文章內(nèi)容處理菜單選擇1后有:圖11 文本查找結(jié)果選擇2后有:圖12 文章刪除結(jié)果選擇3后有:圖13 文章插入結(jié)果全部結(jié)束后按5回主菜單,按6直接退出程序?;刂鞑藛魏筮x擇5有:圖14 關(guān)于界面回主菜單選擇6后退出本程序。六程序完整代碼*include"stdio.h"*include"malloc.h"*include"string.h"*include"iostream.h"*inclu

33、de"stdlib.h"*include"conio.h"*define Link_Size 100int NUM,C,N;typedef struct list char data80; int length; struct list *next; struct list *pre; int row; LinkList;LinkList *head;void HeadWord()/system("cls"); printf("tt*n");printf("tt* 歡迎使用簡單的文本編輯器 *n"

34、;);printf("tt*n");LinkList *CreatWord() LinkList *temp; char ch; int i,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("開始創(chuàng)建文本,請輸入文章(輸入*號結(jié)束):n")

35、;for(j=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

36、(i=0;i<80;i+) temp->datai='0'temp->row=NUM+1;system("cls");return temp;void PrintWord()int i,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)!=

37、9;*'i+)printf("%c",p->datai);p=p->next;void CountWord() LinkList *temp; char ch; int i,j,t; int WORD=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'

38、;)&&(ch<='Z') WORD+; else if(ch>='a')&&(ch<='z') word+; else if(ch>='0')&&(ch<='9') num+; else if(ch=' ') space+; else if(ch=33|ch=34|ch=39|ch=44|ch=46|ch=58|ch=59|ch=63) punct+; sum=WORD+word+num; while(1) printf

39、("n"); HeadWord(); printf("tt*n"); printf("tt* 文章內(nèi)容統(tǒng)計菜單 *n"); printf("tt*n"); printf("tt* 1、文章中大寫字母的個數(shù) *n"); printf("tt* 2、文章中小寫字母的個數(shù) *n"); printf("tt* 3、文章中數(shù)字的個數(shù) *n"); printf("tt* 4、文章中標(biāo)點符號的個數(shù) *n"); printf("tt* 5、文

40、章中空格的個數(shù) *n"); printf("tt* 6、文章中所有字?jǐn)?shù) *n"); printf("tt* 7、退出返回主菜單 *n"); printf("tt* 8、直接退出本系統(tǒng) *n"); printf("tt*n"); printf("tt請選擇需統(tǒng)計項目:"); scanf("%d",&t); switch(t) case 1: system("cls"); HeadWord(); printf("ntt文章中大寫字母

41、的個數(shù):%dn",WORD); printf("按回車鍵繼續(xù)·····");getchar();getchar();system("cls"); break; case 2: system("cls"); HeadWord(); printf("ntt文章中小寫字母的個數(shù):%dn",word); printf("按回車鍵繼續(xù)·····");getchar();getchar();syst

42、em("cls");break; case 3: system("cls"); HeadWord(); printf("ntt文章中數(shù)字的個數(shù):%dn",num); printf("按回車鍵繼續(xù)·····");getchar();getchar();system("cls");break; case 4: system("cls"); HeadWord(); printf("ntt文章中標(biāo)點符號的個數(shù):%dn&quo

43、t;,punct); printf("按回車鍵繼續(xù)·····");getchar();getchar();system("cls"); break; case 5: system("cls"); HeadWord(); printf("ntt文章中空格的個數(shù):%dn",space); printf("按回車鍵繼續(xù)·····");getchar();getchar();system("cl

44、s"); break; case 6: system("cls"); HeadWord(); printf("ntt文章中所有字?jǐn)?shù):%dn",sum); printf("按回車鍵繼續(xù)·····");getchar();getchar();system("cls"); break; if(t=7) system("cls"); break; if(t=8) exit(0); void SearchWord(char *str1,LinkL

45、ist* temp) char Data20 ; int i,j,k=0,sum=0;int l=1; temp=head->next; strcpy(Data,str1); for(i=0;i<=NUM;i+) for(j=0;j<80;j+) if(temp->dataj)=Datak) k+; else if(Datak!='0')j=j-k;k=0; if(Datak='0') sum+;j=j-k+1;printf("tt第%d次出現(xiàn)在第%d行第%d列n",l,i+1,j+1);l+;k=0;continue

46、; temp=temp->next; printf("ttt字符串總共出現(xiàn)次數(shù)為:%dnn",sum); C=sum;N=i*80+j; void DeleteWord(char *str2) char Data20; LinkList *temp,*term; int i,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+

47、) if(temp->dataj)=Datak) k+; else if(Datak!='0') 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; LinkLis

48、t * InsertWord(LinkList *temp) char Data20; int h,l; printf("ntt請輸入要插入的字符或字符串:");getchar();gets(Data);printf("ntt當(dāng)前文章內(nèi)容為:");PrintWord();printf("ntt請輸入要插入的行:");scanf("%d",&h);printf("ntt請輸入要插入的列:");scanf("%d",&l); int i=(h-1)*80+l; L

49、inkList *a;int n=strlen(Data);int m ;int insertRow=i/80+1;int row=temp->row;int j;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; elseint r=0;for(int p=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;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-

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論