文章編輯數(shù)據(jù)結(jié)構(gòu)設(shè)計報告_第1頁
文章編輯數(shù)據(jù)結(jié)構(gòu)設(shè)計報告_第2頁
文章編輯數(shù)據(jù)結(jié)構(gòu)設(shè)計報告_第3頁
文章編輯數(shù)據(jù)結(jié)構(gòu)設(shè)計報告_第4頁
文章編輯數(shù)據(jù)結(jié)構(gòu)設(shè)計報告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

文章編輯設(shè)計報告一、實訓(xùn)目的及要求數(shù)據(jù)結(jié)構(gòu)是計算機課程的一門重要的根底課,它的教學(xué)要求大致有三個重要方面:其一就是讓學(xué)生學(xué)會分析研究計算機加工的數(shù)據(jù)對象的特性,以便為數(shù)據(jù)選擇適當(dāng)?shù)奈锢斫Y(jié)構(gòu)和邏輯結(jié)構(gòu);其二,根據(jù)結(jié)構(gòu),選擇適當(dāng)?shù)乃惴ǎ⒊醪秸莆账惴ǖ臅r間分析和空間分析;其三,學(xué)習(xí)復(fù)雜的程序設(shè)計。本綜合實訓(xùn)利用VisualStudio2008集成編程環(huán)境為實踐工具,通過上機實踐培養(yǎng)學(xué)生分析具體問題、解決實際問題的能力,訓(xùn)練和培養(yǎng)學(xué)生的數(shù)據(jù)抽象能力和程序設(shè)計的能力。數(shù)據(jù)結(jié)構(gòu)是一門實踐性較強的課程,以養(yǎng)學(xué)生的數(shù)據(jù)抽象能力和程序設(shè)計的能力為目的。在實訓(xùn)時應(yīng)注重培養(yǎng)學(xué)生的實際操作能力。本綜合實訓(xùn)安排了20學(xué)時的實驗課時,完成4次上機作業(yè)。具體要求如下:1.學(xué)習(xí)和理解每個實訓(xùn)題目的根本理論和方法;2.掌握每個實驗的實現(xiàn)步驟和關(guān)鍵技術(shù);3.準(zhǔn)備好實驗所需要的資源和文檔;4.上機實現(xiàn)程序,得到通過調(diào)試的正確程序。5.根據(jù)每個實驗的不同要求,完成實驗報告的word文檔。實訓(xùn)環(huán)境WindowsXPVisualStudio2010實訓(xùn)內(nèi)容文章編輯1)問題描述輸入一頁文字,程序可以統(tǒng)計出文字、數(shù)字、空格的個數(shù)。2)根本要求靜態(tài)存儲一頁文章,每行最多不超過80個字符,共N行;要求〔1〕分別統(tǒng)計出其中英文字母數(shù)和空格數(shù)及整篇文章總字數(shù);〔2〕統(tǒng)計某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù);〔3〕刪除某一子串,并將后面的字符前移?!?〕替換字符串〔5〕可以保存到文件中,也可以在文件中翻開四、算法描述及實訓(xùn)步驟定義一個串,可使用順序串或者鏈表串。實現(xiàn)串的插入、刪除、修改、替換、遍歷等功能。并能夠把串保存在文件中/*文本每行以字符串形式存儲,行與行之間以鏈表存儲*/usingnamespacestd;typedefstructline{ char*data; structline*next;}LINE;/*創(chuàng)立一鏈表,同時向里面輸入文本數(shù)據(jù)*/int strlength(str*s)/*統(tǒng)計字母數(shù)*/intCountLetter(LINE*&head){LINE*p=head;intcount=0;do{intLen=strlen(p->data);/*計算當(dāng)前data里的數(shù)據(jù)元素的個數(shù)*/for(inti=0;i<Len;i++)if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z'))/*計算字母數(shù)*/count++;}while((p=p->next)!=NULL);/*遍歷鏈表*/returncount;/*返回文章的字母總數(shù)*/}/*統(tǒng)計數(shù)字數(shù)*/intCountNumber(LINE*&head){LINE*p=head;intcount=0;do{intLen=strlen(p->data);/*計算當(dāng)前data里的數(shù)據(jù)元素的個數(shù)*/for(inti=0;i<Len;i++)if(p->data[i]>=48&&p->data[i]<=57)count++;/*計算數(shù)字數(shù),ASCII碼*/}while((p=p->next)!=NULL);/*遍歷鏈表*/returncount;}/*統(tǒng)計空格數(shù)*/intCountSpace(LINE*&head){LINE*p=head;intcount=0;do{intLen=strlen(p->data);/*計算當(dāng)前data里的數(shù)據(jù)元素的個數(shù)*/for(inti=0;i<Len;i++)if(p->data[i]==32)count++;/*計算空格數(shù),空格ASCII碼為32*/}while((p=p->next)!=NULL);/*遍歷鏈表*/returncount;}/*統(tǒng)計文章的總字數(shù)*/intCountAll(LINE*&head){LINE*p=head;/*保存鏈表的首地址*/intcount=0;do/*計算總字符數(shù)*/{count+=strlen(p->data);}while((p=p->next)!=NULL);/*遍歷鏈表*/returncount;}/*統(tǒng)計str在文章中出現(xiàn)的次數(shù)*/intFindString(LINE*&head,char*str){LINE*p=head;intcount=0;inth=0;intlen1=0;/*保存當(dāng)前行的總字符數(shù)*/intlen2=strlen(str);/*待統(tǒng)計字符串的長度*/inti,j,k;do{len1=strlen(p->data);/*當(dāng)前行的字符數(shù)*/for(i=0;i<len1;i++)/*字符匹配*/{if(p->data[i]==str[0]){k=0;for(j=0;j<len2;j++)if(p->data[i+j]==str[j])k++;if(k==len2){count++;i=i+k-1;}}}}while((p=p->next)!=NULL);/*遍歷鏈表*/returncount;}/*刪除指定的字符串*/voiddelstringword(char*s,char*str)/**s為輸入的字符串,*str為將要刪除的字符*/{char*p=strstr(s,str);/*從字符串s中尋找str第一次出現(xiàn)的位置*/chartmp[80];intlen=strlen(s);inti=len-strlen(p);intj=i+strlen(str);intcount=0;for(intm=0;m<i;m++)tmp[count++]=s[m];for(intn=j;n<len;n++)tmp[count++]=s[n];tmp[count]='\0';strcpy(s,tmp);/*返回新的字符串*/}/*替換指定的字符串*/voidrepstringword(char*s,char*str,char*strb)/**s為輸入的字符串,*str為將要被替換的字符,strb為替換字符*/{char*p=strstr(s,str);/*從字符串s中尋找str第一次出現(xiàn)的位置*/chartmp[80];intq=0;intk=strlen(strb);intlen=strlen(s);inti=len-strlen(p);intj=i+strlen(str);intcount=0;for(intm=0;m<i;m++)tmp[count++]=s[m];for(into=0;o<k;o++)tmp[count++]=strb[q++];for(intn=j;n<len;n++)tmp[count++]=s[n];tmp[count]='\0';strcpy(s,tmp);/*返回新的字符串*/}printf("\n\t\t*******************************************");printf("\n\t\t*1------統(tǒng)計數(shù)據(jù)*");printf("\n\t\t*2------統(tǒng)計字符串*");printf("\n\t\t*3------替換字符串*");printf("\n\t\t*4------刪除字符串*");printf("\n\t\t*5------顯示文章*");printf("\n\t\t*6------保存文章*");printf("\n\t\t*0------退出程序*");printf("\n\t\t*******************************************");printf("\n\t\t請選擇操作序號:〔0---4〕:\n");五、總結(jié)及心得體會開始的需求分析、概念結(jié)構(gòu)設(shè)計、邏輯結(jié)構(gòu)設(shè)計、物理結(jié)構(gòu)設(shè)計。很多東西書上寫的很清楚,貌似看著也很簡單,思路非常清晰。但真正需要自己想方法去設(shè)計的時候才發(fā)現(xiàn)其中的難度。經(jīng)常做到后面突然就發(fā)現(xiàn)自己一開始的設(shè)計有問題,然后又回去翻工,在各種反復(fù)中不斷完善自己的想法。因為沒有事先做過仔細的分析需求,導(dǎo)致很多問題。這是作為設(shè)計開發(fā)人員需要特別警惕防止的,不然會給后來的工作帶來很大的麻煩,甚至可能會需要全盤推倒重來。就比方?jīng)]有注意到要換行輸入所以最開始沒有用鏈表結(jié)構(gòu),所以導(dǎo)致程序到最后全部否認重新開始設(shè)計。所以以后的課程設(shè)計要特別注意這一塊的設(shè)計。

六、實訓(xùn)結(jié)果七、源代碼:#include<iostream>#include<string.h>#include<stdio.h>#include<conio.h>/*文本每行以字符串形式存儲,行與行之間以鏈表存儲*/usingnamespacestd;typedefstructline{ char*data; structline*next;}LINE;/*創(chuàng)立一鏈表,同時向里面輸入文本數(shù)據(jù)*///輸入文字voidCreate(LINE*&head){ LINE*p=newLINE;/*首先為鏈表建立一個附加表頭結(jié)點*/ head=p;/*將p付給表頭指針*/ chartmp[1000]={0}; inttemp=0; printf("\n\t\t*******************************************"); printf("\n\t\t*1------輸入文章*"); printf("\n\t\t*2------讀取文章*"); printf("\n\t\t*******************************************"); printf("\n\t\t請選擇操作的序號:"); //選擇輸入方式,1為鍵盤輸入,2為讀取文件輸入 while(1) { scanf("%d",&temp); if(temp==1) //鍵盤輸入 { fflush(stdin); //清空輸入緩存 printf("請輸入一頁文章,以'#'為結(jié)尾(每行最多輸入80字符!):\n"); while(1) { while(1) { gets(tmp);/*輸入字符串!*/ if(strlen(tmp)>80) printf("每行最多輸入80字符,請重新輸入!\n"); else break; } p=p->next=newLINE; p->data=newchar[strlen(tmp)+1];/*為結(jié)點分配空間?*/ strcpy(p->data,tmp); if(tmp[strlen(tmp)-1]=='#')/*除去最后一個控制符#*/ { p->data[strlen(tmp)-1]='\0'; break; } } p->next=NULL;/*最后的一個指針為空?*/ head=head->next; FILE*fp; //鍵盤輸入保存為文件 LINE*q=head; if((fp=fopen("d:\\write.txt","w+"))==NULL) { printf("翻開文件出錯!\n"); system("pause"); exit(0); } while(q->next!=NULL) { fputs(q->data,fp); fputs("\n",fp); q=q->next; } fputs(q->data,fp); fputs("\n",fp); fputs("#",fp); fclose(fp); printf("保存到文件中成功!"); system("pause"); break; } elseif(temp==2) //文件讀取輸入 { inti,j=0; FILE*fp; //讀取文件 charch; if((fp=fopen("d:\\write.txt","r"))==NULL) { printf("文件無法翻開,退出程序!\n"); system("pause"); exit(0); } while(1) { ch=fgetc(fp); while(ch!='\n') { tmp[j]=ch; if(ch=='#')break; j++; ch=fgetc(fp); } p=p->next=newLINE; p->data=newchar[strlen(tmp)+1];/*為結(jié)點分配空間?*/ strcpy(p->data,tmp); if(tmp[strlen(tmp)-1]=='#')/*除去最后一個控制符#*/ { p->data[strlen(tmp)-1]='\0'; fclose(fp); break; } for(i=0;i<j;i++) tmp[i]=0; j=0; } p->next=NULL;/*最后的一個指針為空?*/ head=head->next; break; } else //其他情況處理 { fflush(stdin); printf("請輸入1或2!"); } }}/*統(tǒng)計字母數(shù)*/intCountLetter(LINE*&head){ LINE*p=head; intcount=0; do { intLen=strlen(p->data);/*計算當(dāng)前data里的數(shù)據(jù)元素的個數(shù)*/ for(inti=0;i<Len;i++) if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z'))/*計算字母數(shù)*/ count++; } while((p=p->next)!=NULL);/*遍歷鏈表*/ returncount;/*返回文章的字母總數(shù)*/}/*統(tǒng)計數(shù)字數(shù)*/intCountNumber(LINE*&head){ LINE*p=head; intcount=0; do { intLen=strlen(p->data);/*計算當(dāng)前data里的數(shù)據(jù)元素的個數(shù)*/ for(inti=0;i<Len;i++) if(p->data[i]>=48&&p->data[i]<=57) count++;/*計算數(shù)字數(shù),ASCII碼*/ } while((p=p->next)!=NULL);/*遍歷鏈表*/ returncount;}/*統(tǒng)計空格數(shù)*/intCountSpace(LINE*&head){ LINE*p=head; intcount=0; do { intLen=strlen(p->data);/*計算當(dāng)前data里的數(shù)據(jù)元素的個數(shù)*/ for(inti=0;i<Len;i++) if(p->data[i]==32) count++;/*計算空格數(shù),空格ASCII碼為32*/ } while((p=p->next)!=NULL);/*遍歷鏈表*/ returncount;}/*統(tǒng)計文章的總字數(shù)*/intCountAll(LINE*&head){ LINE*p=head;/*保存鏈表的首地址*/ intcount=0; do/*計算總字符數(shù)*/ { count+=strlen(p->data); } while((p=p->next)!=NULL);/*遍歷鏈表*/ returncount;}/*統(tǒng)計str在文章中出現(xiàn)的次數(shù)*/intFindString(LINE*&head,char*str){ LINE*p=head; intcount=0; inth=0; intlen1=0;/*保存當(dāng)前行的總字符數(shù)*/ intlen2=strlen(str);/*待統(tǒng)計字符串的長度*/ inti,j,k; do { len1=strlen(p->data);/*當(dāng)前行的字符數(shù)*/ for(i=0;i<len1;i++)/*字符匹配*/ { if(p->data[i]==str[0]) { k=0; for(j=0;j<len2;j++) if(p->data[i+j]==str[j]) k++; if(k==len2) { count++; i=i+k-1; } } } } while((p=p->next)!=NULL);/*遍歷鏈表*/ returncount;}/*刪除指定的字符串*/voiddelstringword(char*s,char*str)/**s為輸入的字符串,*str為將要刪除的字符*/{ char*p=strstr(s,str);/*從字符串s中尋找str第一次出現(xiàn)的位置*/ chartmp[80]; intlen=strlen(s); inti=len-strlen(p); intj=i+strlen(str); intcount=0; for(intm=0;m<i;m++) tmp[count++]=s[m]; for(intn=j;n<len;n++) tmp[count++]=s[n]; tmp[count]='\0'; strcpy(s,tmp);/*返回新的字符串*/}voidDelString(LINE*&head,char*str){ LINE*p=head; do //確定所有重復(fù)字符,并調(diào)用子函數(shù)刪除 { do { if(strstr(p->data,str)!=NULL) delstringword(p->data,str); } while(strstr(p->data,str)!=NULL); } while((p=p->next)!=NULL);}/*向屏幕輸出文章*/voidOutPut(LINE*&head){ LINE*p=head; do { printf("%s\n",p->data); } while((p=p->next)!=NULL);}voidrepstringword(char*s,char*str,char*strb)/**s為輸入的字符串,*str為將要被替換的字符,strb為替換字符*/{ char*p=strstr(s,str);/*從字符串s中尋找str第一次出現(xiàn)的位置*/ chartmp[80]; intq=0; intk=strlen(strb); intlen=strlen(s); inti=len-strlen(p); intj=i+strlen(str); intcount=0; for(intm=0;m<i;m++) tmp[count++]=s[m]; for(into=0;o<k;o++) tmp[count++]=strb[q++]; for(intn=j;n<len;n++) tmp[count++]=s[n]; tmp[count]='\0'; strcpy(s,tmp);/*返回新的字符串*/}voidreplaceString(LINE*&head,char*str,char*stra){ LINE*p=head; do //確定所有重復(fù)字符,并調(diào)用子函數(shù)替換 { do { if(strstr(p->data,str)!=NULL) repstringword(p->data,str,stra); } while(strstr(p->data,str)!=NULL); } while((p=p->next)!=NULL);}intmain(){ LINE*head; charc; charstr1[20],str2[20],str3[80],str4[80]; Create(head); printf("輸入的文章為:\n"); OutPut(head); printf("\n"); fflush(stdin); while(1) { system("cls");printf("\n\t\t*******************************************");printf("\n\t\t*1------統(tǒng)計數(shù)據(jù)*");printf("\n\t\t*2------統(tǒng)計字符串*");printf("\n\t\t*3------替換字符串*");printf("\n\t\t*4------刪除字符串*");printf("\n\t\t*5------顯示文章*");printf("\n\t\t*6------保存文章*");printf("\n\t\t*0------退出程序*");printf("\n\t\t*******************************************");printf("\n\t\t請選擇操作序號:〔0---4〕:\n"); c=getch();if(c

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論