文章編輯(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  課程設(shè)計(jì)題目: 文章編輯 </p><p><b>  學(xué)生姓名: </b></p><p>  專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)</p><p><b>  班 級(jí):</b></p&g

2、t;<p><b>  學(xué) 號(hào): </b></p><p><b>  指導(dǎo)教師: </b></p><p>  2012年 06月21日</p><p><b>  目錄</b></p><p><b>  一、實(shí)驗(yàn)題目1</b>

3、</p><p>  二、實(shí)驗(yàn)時(shí)間、地點(diǎn)1</p><p><b>  三、實(shí)驗(yàn)?zāi)康?</b></p><p><b>  四、實(shí)驗(yàn)要求1</b></p><p><b>  五、實(shí)現(xiàn)思路2</b></p><p><b>  1、定義

4、結(jié)構(gòu)體2</b></p><p><b>  2、主要函數(shù):2</b></p><p><b>  六、實(shí)現(xiàn)過程4</b></p><p><b>  主要代碼:4</b></p><p><b>  運(yùn)行結(jié)果:10</b></

5、p><p><b>  七、實(shí)驗(yàn)總結(jié)14</b></p><p><b>  八、參考文獻(xiàn)14</b></p><p><b>  一、實(shí)驗(yàn)題目</b></p><p>  文章編輯:輸入一頁文字,程序可以統(tǒng)計(jì)出字母、數(shù)字、空格的個(gè)數(shù)。靜態(tài)存儲(chǔ)一頁文章,每行最多不超過80個(gè)字符

6、,共N行;</p><p><b>  二、實(shí)驗(yàn)時(shí)間、地點(diǎn)</b></p><p>  第十九周,軟件樓603</p><p><b>  三、實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  本次課程設(shè)計(jì)的主要目的是綜合運(yùn)用所學(xué)的數(shù)據(jù)結(jié)構(gòu)知識(shí)解決一個(gè)比較實(shí)際問題,側(cè)重對(duì)鏈表、數(shù)組、字符串、圖、樹等相關(guān)內(nèi)容的綜

7、合應(yīng)用,使同學(xué)們能進(jìn)一步熟悉掌握數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識(shí),進(jìn)一步提升自己的解決問題和編程調(diào)試能力,為后續(xù)專業(yè)課程的學(xué)習(xí)打下良好的基礎(chǔ)。</p><p><b>  四、實(shí)驗(yàn)要求</b></p><p> ?。?)分別統(tǒng)計(jì)出其中英文字母數(shù)和空格數(shù)及整篇文章總字?jǐn)?shù); </p><p>  (2)統(tǒng)計(jì)某一字符串在文章中出現(xiàn)的次數(shù),并輸出該次數(shù); </

8、p><p> ?。?)刪除某一子串,并將后面的字符前移。存儲(chǔ)結(jié)構(gòu)使用線性表,分別用幾個(gè)子函數(shù)實(shí)現(xiàn)相應(yīng)的功能;輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標(biāo)點(diǎn)符號(hào)。 </p><p><b>  輸出形式:</b></p><p>  (1)分行輸出用戶輸入的各行字符; </p><p>  (2)分4行輸出

9、"全部字母數(shù)"、"數(shù)字個(gè)數(shù)"、"空格個(gè)數(shù)"、"文章總字?jǐn)?shù)"</p><p> ?。?)輸出刪除某一字符串后的文章; </p><p><b>  五、實(shí)現(xiàn)思路</b></p><p><b>  1、定義結(jié)構(gòu)體</b></p>&

10、lt;p>  定義結(jié)構(gòu)體 struct line,文本行采用順序存儲(chǔ),行與行之間采用鏈?zhǔn)酱鎯?chǔ)</p><p><b>  2、主要函數(shù):</b></p><p>  int FindString(LINE * &head,char *str) /*統(tǒng)計(jì)str在文章中出現(xiàn)的次數(shù)*/</p><p>  求在一行中Str出現(xiàn)的次數(shù)的流

11、程圖:</p><p>  ①.查找第一個(gè)字符,如果有第一個(gè)字符即p->data[i]==str[0],設(shè)計(jì)數(shù)器k=0</p><p>  ②.查找這個(gè)字符后面的字符與要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++</p><p>  ③.重復(fù)第二步,如果k=len2,則查找到,count++;如果沒查找到,重新進(jìn)行第一

12、步</p><p>  void delstringword(char *s,char *str) /*刪除字符串*s中的字符串*str*/</p><p><b>  實(shí)現(xiàn)思想:</b></p><p>  ①.從字符串s中尋找str第一次出現(xiàn)的位置 *p=strstr(s,str);</p><p> ?、冢甽en

13、=strlen(s);i=len-strlen(p)即前i項(xiàng)恰好不含要?jiǎng)h除的字符串,將前i項(xiàng)復(fù)制到tmp中</p><p>  ③.j=i+strlen(str) 即要?jiǎng)h除的字符串在i+1和j之間,將j之后的字符串復(fù)制到tmp中</p><p>  ④.將tmp賦給串s,返回s</p><p><b>  六、實(shí)現(xiàn)過程</b></p>

14、;<p><b>  主要代碼:</b></p><p>  #include <string.h></p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #include <con

15、io.h></p><p>  typedef struct line</p><p><b>  {</b></p><p>  char *data;</p><p>  struct line *next;</p><p><b>  }LINE;</b><

16、/p><p>  void Create(LINE * &head)</p><p><b>  {</b></p><p>  printf ("請(qǐng)輸入一頁文章,以Ctrl+E(^E)為結(jié)尾(每行最多輸入80字符!):\n");</p><p>  LINE *p=new LINE;

17、 /*首先為鏈表 建立一個(gè)附加表頭結(jié)點(diǎn)*/ </p><p>  head=p; /*將p付給 表頭指針*/</p><p>  char ch[100];</p><p><b>  while(1)</b>

18、;</p><p><b>  {</b></p><p>  gets(ch); /*輸入字符串!*/</p><p>  if(strlen(ch)>80)</p><p><b>  {</b></p><p>  printf

19、("每行最多輸入80字符");</p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(ch[0]==5)break; /*如果發(fā)現(xiàn)輸入 ^E,則退出輸入*/ </p><p>  p=p

20、->next=new LINE;</p><p>  p->data=new char[strlen(ch)+1]; /*為結(jié)點(diǎn)分配空間 */ </p><p>  strcpy(p->data,ch);</p><p>  if(ch[strlen(ch)-1]==5) /*除去最后一個(gè)控制符 ^E */&l

21、t;/p><p>  { </p><p>  p->data[strlen(ch)-1]='\0';</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }<

22、/b></p><p>  p->next=NULL; /*最后的一個(gè)指針為空 */</p><p>  head=head->next;</p><p><b>  }</b></p><p>  /**文本字?jǐn)?shù)統(tǒng)計(jì)**/</p><p&

23、gt;  int Count_Space(LINE* &head)//統(tǒng)計(jì)空格數(shù) </p><p><b>  {</b></p><p>  LINE *p=head;</p><p>  int asc_space=32;</p><p>  int count=0;</p><p>

24、<b>  int i;</b></p><p><b>  int Len;</b></p><p><b>  do{</b></p><p>  Len=strlen(p->data);</p><p>  for(i=0;i<Len;i++)</p&g

25、t;<p>  if(p->data[i]==asc_space)</p><p><b>  count++;</b></p><p>  }while((p=p->next)!=NULL);</p><p>  return count;</p><p><b>  }</b

26、></p><p>  int Count_Num(LINE * &head)//統(tǒng)計(jì)數(shù)字個(gè)數(shù) </p><p><b>  {</b></p><p>  LINE *p=head;</p><p>  int count=0;</p><p><b>  int Len

27、;</b></p><p><b>  int i;</b></p><p><b>  do{</b></p><p>  Len=strlen(p->data);</p><p>  for(i=0;i<Len;i++)</p><p>  if(

28、p->data[i]>=48 && p->data[i]<=57)</p><p><b>  count++;</b></p><p>  }while((p=p->next)!=NULL);</p><p>  return count; </p><p><b&g

29、t;  }</b></p><p>  int Count_All_Word(LINE * &head)//統(tǒng)計(jì)文章的總字?jǐn)?shù) </p><p><b>  {</b></p><p>  LINE *p=head;</p><p>  int count=0;</p><p>

30、<b>  do{</b></p><p>  count+=strlen(p->data);</p><p>  }while((p=p->next)!=NULL);</p><p>  return count;</p><p><b>  }</b></p><

31、p>  int Count_Letter(LINE * &head)//統(tǒng)計(jì)字母數(shù) </p><p><b>  {</b></p><p>  LINE *p=head;</p><p>  int count=0;</p><p><b>  int Len;</b></p&

32、gt;<p><b>  int i;</b></p><p><b>  do{</b></p><p>  Len=strlen(p->data);</p><p>  for(i=0;i<Len;i++)</p><p>  if(p->data[i]>=

33、'a' && p->data[i]<='z'||p->data[i]>='A' && p->data[i]<='Z')count++; //計(jì)算字母?jìng)€(gè)數(shù)</p><p><b>  }</b></p><p>  while((p=

34、p->next)!=NULL);</p><p>  return count;</p><p><b>  }</b></p><p>  int Find_Word(LINE * &head,char *sch)//統(tǒng)計(jì) sch 在文章中出現(xiàn)的次數(shù)</p><p><b>  {</b&

35、gt;</p><p>  LINE *p=head;</p><p>  int count=0;</p><p>  int len1=0;</p><p>  int len2=strlen(sch);</p><p>  int i,j,k;</p><p><b>  do{

36、</b></p><p>  len1=strlen(p->data);//當(dāng)前行的字符數(shù)</p><p>  for(i=0;i<len1;i++)</p><p><b>  {</b></p><p>  if(p->data[i]==sch[0])</p><p&

37、gt;<b>  {</b></p><p><b>  k=0;</b></p><p>  for(j=0;j<=len2-1;j++)</p><p>  if(p->data[i+j]==sch[j])k=k+1;</p><p>  if(k==len2) {count++;i

38、=i+k-1;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  }while((p=p->next)!=NULL);</p><p>  return count; </p><p><b>  }<

39、/b></p><p>  /**特定字符串的刪除**/</p><p>  void del_string_word(char *s,char *sch) </p><p><b>  {</b></p><p>  char *p=strstr(s,sch);</p><p>  ch

40、ar tmp[80];</p><p>  int len=strlen(s);</p><p><b>  int k,kk;</b></p><p>  int i=len-strlen(p);</p><p>  int j=i+strlen(sch);</p><p>  int coun

41、t=0;</p><p>  for(k=0;k<i;k++)</p><p>  tmp[count++]=s[k];</p><p>  for(kk=j;kk<len;kk++)</p><p>  tmp[count++]=s[kk];</p><p>  tmp[count]='\0

42、9;;</p><p>  strcpy(s,tmp);</p><p><b>  }</b></p><p>  void Del_String(LINE * &head,char *sch)//刪除指定的字符串</p><p><b>  {</b></p><p&

43、gt;  LINE *p=head;</p><p><b>  do{</b></p><p>  while(strstr(p->data,sch)!=NULL)</p><p>  del_string_word(p->data,sch);</p><p>  }while((p=p->next)

44、!=NULL);</p><p><b>  }</b></p><p>  /**打印輸入的文本**/</p><p>  void OutPutTxt(LINE * &head)//向屏幕輸出文章 </p><p><b>  {</b></p><p>  LI

45、NE *p=head;</p><p>  printf("文本文件輸出如下:");</p><p><b>  do{</b></p><p>  printf("%s\n",p->data);</p><p>  }while((p=p->next)!=NULL);

46、</p><p><b>  }</b></p><p>  void Count(LINE * &head)</p><p><b>  {</b></p><p>  printf("文章統(tǒng)計(jì)信息結(jié)果如下:\n");</p><p>  pri

47、ntf("英文字母數(shù):%d\n",Count_Letter(head));</p><p>  printf("空格數(shù): %d \n",Count_Space(head));</p><p>  printf("文章中共出現(xiàn)數(shù)字:%d\n",Count_Num(head));</p><p>  print

48、f("文章出現(xiàn)的漢字和標(biāo)點(diǎn)(全角)總數(shù): %d\n",(Count_All_Word(head)-Count_Num(head)-Count_Space(head)-Count_Letter(head))/2);</p><p>  printf("統(tǒng)計(jì)文章的總字?jǐn)?shù): %d\n",(Count_All_Word(head)+Count_Num(head)+Count_Spa

49、ce(head)+Count_Letter(head))/2);</p><p>  printf("\n");</p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p> 

50、 LINE *head;</p><p>  char sch[20];</p><p>  char ID[10];</p><p><b>  char ch;</b></p><p>  char tmp_sch[20];</p><p>  printf("

51、 文章編輯系統(tǒng) \n");</p><p>  printf(" 主菜單如下:\n");</p><p><b>  while(1)</b></p><p><b>  {</b></p>&

52、lt;p>  printf(" *******************************************************************\n");</p><p>  printf(" 1.新建文本\n");</p><p>  printf("

53、 2.瀏覽輸入文本\n");</p><p>  printf(" 3.文本字符統(tǒng)計(jì)\n");</p><p>  printf(" 4.特定字符串的統(tǒng)計(jì)\n");</p><p>  prin

54、tf(" 5.特定字符串的刪除\n");</p><p>  printf(" 6.退出\n");</p><p>  printf(" ********************************************************

55、***********\n");</p><p>  printf("注:請(qǐng)您按關(guān)鍵字代號(hào)選擇菜單操作!如是第一次操作,務(wù)必先選第一步!\n");</p><p>  printf("請(qǐng)輸入序號(hào):");</p><p>  scanf("%s",ID);</p><p>&

56、lt;b>  while(1)</b></p><p><b>  {</b></p><p>  if(strcmp(ID,"1")==0)</p><p><b>  {</b></p><p>  printf("新建文本要覆蓋已有文本,是否繼續(xù)

57、輸入?(Y/N)\n");</p><p>  getchar();</p><p>  scanf("%c",&ch);</p><p>  system("cls");</p><p>  if(ch=='n'||ch=='N')</p>

58、<p><b>  break;</b></p><p>  else if(ch=='y'||ch=='Y')</p><p>  Create(head);</p><p><b>  break;</b></p><p><b>  }&

59、lt;/b></p><p>  else if(strcmp(ID,"2")==0)</p><p><b>  {</b></p><p>  system("cls");</p><p>  OutPutTxt(head);</p><p>&l

60、t;b>  break;</b></p><p><b>  }</b></p><p>  else if(strcmp(ID,"3")==0)</p><p><b>  {</b></p><p>  system("cls");<

61、;/p><p>  OutPutTxt(head);</p><p>  printf("\n");</p><p>  Count(head);</p><p><b>  break;</b></p><p><b>  }</b></p>

62、<p>  else if(strcmp(ID,"4")==0)</p><p><b>  {</b></p><p>  system("cls");</p><p>  printf("請(qǐng)輸入要統(tǒng)計(jì)的字符串:");</p><p>  scanf

63、("%s",sch);</p><p>  printf("\n");</p><p>  OutPutTxt(head);</p><p>  printf("\n");</p><p>  printf("出現(xiàn)的次數(shù)為: %d\n",Find_Word(

64、head,sch));</p><p><b>  break;</b></p><p><b>  }</b></p><p>  else if(strcmp(ID,"5")==0)</p><p><b>  {</b></p><

65、p>  system("cls");</p><p>  printf("請(qǐng)輸入要?jiǎng)h除的某一字符串:");</p><p>  scanf("%s",tmp_sch);</p><p>  printf("\n");</p><p>  OutPutTxt(

66、head);</p><p>  Del_String(head,tmp_sch);</p><p>  printf("刪除后");</p><p>  OutPutTxt(head);</p><p><b>  break;</b></p><p><b>  

67、}</b></p><p>  else if(strcmp(ID,"6")==0)</p><p><b>  {</b></p><p>  printf("你確定要退出系統(tǒng)嗎?(Y/N)\n");</p><p>  getchar();</p>&

68、lt;p>  scanf("%c",&ch);</p><p>  system("cls");</p><p>  if(ch=='n'||ch=='N')</p><p><b>  break;</b></p><p>  els

69、e if(ch=='y'||ch=='Y') exit(0);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  system("cls&q

70、uot;);</p><p>  printf("您輸入字母有錯(cuò),請(qǐng)重新輸入!\n\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&

71、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  運(yùn)行結(jié)果:</b></p><p><b>  1、主界面</b></p><p><b>  2、新建文本界面</b></p&g

72、t;<p><b>  3、瀏覽文本</b></p><p><b>  4、文本字符統(tǒng)計(jì)</b></p><p><b>  5、特定字符串統(tǒng)計(jì)</b></p><p><b>  6、特定字符串刪除</b></p><p><b&g

73、t;  七、實(shí)驗(yàn)總結(jié)</b></p><p>  本次課程設(shè)計(jì)歷時(shí)一周,所用知識(shí)基本上包括了課本所學(xué)的知識(shí)以及很多有關(guān)C++的基礎(chǔ)知識(shí),課程設(shè)計(jì)的過程中自己更更進(jìn)一步了解了鏈表,掌握了數(shù)據(jù)結(jié)構(gòu)的思想與方法,也使我認(rèn)識(shí)到自己在學(xué)習(xí)編程方面還有很多的不足。自己在編寫程序的過程中,不是所有知識(shí)一下就想起來的,而是出現(xiàn)了不少錯(cuò)誤,通過調(diào)試,在查閱一些資料后,才整理出來的。今后我要多讀一些編程方面的書籍,不能只

74、拘泥于課本上的知識(shí),并注重理論與實(shí)踐的結(jié)合,多上機(jī)練習(xí)編寫程序,提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力,不斷充實(shí)自己,更好的掌握編程思想。我相信,隨著時(shí)間的積累系統(tǒng)中很多內(nèi)容都將得到充實(shí)。</p><p>  其實(shí),系統(tǒng)中也有不少亮點(diǎn),比如:統(tǒng)計(jì)出漢字個(gè)數(shù),strstr()函數(shù)的應(yīng)用,鏈表的運(yùn)用,清屏函數(shù)等。</p><p><b>  八、參考文獻(xiàn)</b></

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論