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

下載本文檔

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

文檔簡介

1、<p><b>  課程設計</b></p><p>  題 目: 文章編輯 </p><p>  課 程 名: 算法與課程設計 </p><p>  系 (部): 數(shù)學與計算機

2、 </p><p>  專 業(yè): 計算機科學與技術 </p><p>  學生姓名: </p><p>  學 號:

3、 </p><p>  指導教師: 職稱(學位): 副教授(碩士)</p><p>  完成時間: 2016 年 12 月 28日 </p><p><b>  概述</b></p><p><b>  任務描述:</b></

4、p><p>  輸入一段文字,對文章做出統(tǒng)計、刪除、替換等操作 </p><p><b>  主要功能:</b></p><p>  統(tǒng)計文章字母、數(shù)字、空格個數(shù)及文章總字數(shù),統(tǒng)計字符串,刪除字符串,對指定字符串的替換</p><p><b>  3、設計平臺:</b></p><p

5、><b>  VC++6.0</b></p><p><b>  系統(tǒng)設計</b></p><p><b>  需求分析:</b></p><p>  (1)輸入數(shù)據(jù)的形式和范圍:可以輸入大寫、小寫的英文字母、任何數(shù)字及標點符號;</p><p> ?。?) 分4行輸出&

6、quot;全部字母數(shù)"、"數(shù)字個數(shù)"、"空格個數(shù)"、"文章總字數(shù)" ; </p><p> ?。?)查找指定的字符串;</p><p> ?。?)刪除指定的字符串,輸出刪除某一字符串后的文章;</p><p> ?。?)替換指定的字符串,輸出替換某一字符串后的文章。</p><

7、;p><b>  概要設計</b></p><p><b>  算法思想</b></p><p>  存儲結(jié)構(gòu)使用線性表,分別用幾個子函數(shù)實現(xiàn)相應的功能;</p><p><b>  詳細設計</b></p><p><b>  算法設計</b>&l

8、t;/p><p> ?。?)定義結(jié)構(gòu)體:typedef struct line </p><p><b>  {</b></p><p>  char *data; </p><p>  struct line *next;</p><p><b>  }LI

9、NE;</b></p><p> ?。?)輸出函數(shù)void OutPut(LINE * &head) </p><p><b>  將頭指針賦值為p;</b></p><p>  通過do-while語句遍歷鏈表;</p><p> ?。?)字符串的創(chuàng)建函數(shù): void Create(LINE * &

10、amp;head)</p><p>  用printf語句輸出一句提醒語句,請用戶輸入要編輯的文章</p><p>  為鏈表建立一個附加表頭結(jié)點,將p付給表頭指針;</p><p>  輸入字符串,同時判斷輸入的字符串是否滿足條件;</p><p>  用if語句判斷文章是否輸入完成。</p><p>  (4) 統(tǒng)

11、計文章中英文字母數(shù):void countLetter(LINE * &head)</p><p><b>  將p付給表頭指針;</b></p><p>  初始化count為0;</p><p>  用do-while語句遍歷鏈表,同時統(tǒng)計字符串中英文字母數(shù)</p><p>  用printf語句輸出文章中英文

12、字母數(shù),調(diào)用子函數(shù)menu().</p><p> ?。?) 統(tǒng)計文章中數(shù)字個數(shù):void countNumber(LINE * &head)</p><p><b>  將p付給表頭指針;</b></p><p>  初始化count為0;</p><p>  用do-while語句遍歷鏈表,同時統(tǒng)計字符串中數(shù)

13、字個數(shù);</p><p>  用printf語句輸出文章中數(shù)字個數(shù),調(diào)用子函數(shù)menu().</p><p> ?。?)統(tǒng)計文章中的空格數(shù):void countSpace(LINE * &head)</p><p><b>  將p付給表頭指針;</b></p><p>  初始化count為0;</p&g

14、t;<p>  用do-while語句遍歷鏈表,同時統(tǒng)計字符串中空格數(shù);</p><p>  用printf語句輸出文章中空格數(shù),調(diào)用子函數(shù)menu().</p><p>  (7)統(tǒng)計文章總字數(shù):void countAll(LINE * &head)</p><p><b>  將p付給表頭指針;</b></p&g

15、t;<p>  初始化count為0;</p><p>  用do-while語句遍歷鏈表,同時統(tǒng)計字符串中總字數(shù);</p><p>  用printf語句輸出文章中總字數(shù),調(diào)用子函數(shù)menu().</p><p> ?。?)查找字符串的函數(shù):void FindString(LINE * &head)</p><p>&

16、lt;b>  將p付給表頭指針;</b></p><p>  初始化count為0;</p><p>  初始化len1,用來保存當前行的總字符數(shù);</p><p>  定義整型變量len2表示待統(tǒng)計字符串的長度;</p><p>  用printf語句提醒用戶輸入要統(tǒng)計的字符串;</p><p> 

17、 用do-while語句遍歷鏈表,同時用for循環(huán)和if語句找出指定 字符串在文章中出現(xiàn)的次數(shù);</p><p>  (9)刪除字符串的函數(shù):void DelString(LINE * &head)</p><p>  先創(chuàng)建一個delstringword,其中包含兩個字符串char *s和char *str,用*s表示輸入的字符串,*str表示要刪除的字符。這個函數(shù)的功能

18、是找到字符串s在字符串中出現(xiàn)的位置并刪除該字符串。</p><p>  定義字符串的刪除函數(shù)DelString(),用do-while語句遍歷鏈表,語句中再套用if語句,并調(diào)用delstringword()進行刪除. </p><p> ?。?0)主函數(shù):void main()</p><p>  用switch語句實現(xiàn)功能的調(diào)用。一個數(shù)字對應一個操作</p&

19、gt;<p><b>  算法實現(xiàn)</b></p><p>  (1)文章輸入: </p><p>  int intput() </p><p><b>  { </b></p><p>  printf("請輸入第 %d 行文字\n",i+1);<

20、;/p><p>  gets(str[i]); //讀取數(shù)組的內(nèi)容</p><p>  if(strlen(str[i])>80)</p><p><b>  {</b></p><p>  printf("每行最多輸入80字符,請重新輸入第 %d 行文字\n",i+1);</p>&

21、lt;p>  /*當每行輸入文字大于80字符時輸出此語句,并且重新輸入文字*/</p><p>  gets(str[i]);</p><p><b>  }</b></p><p>  return strlen(str[i]); //返回數(shù)組的長度?</p><p><b>  }</b>

22、</p><p><b>  (2) 文章輸出</b></p><p>  void output() </p><p><b>  { </b></p><p>  for(i=0;i<N;i++) </p><p><b>  { </b>

23、;</p><p>  puts(str[i]); //輸出數(shù)組的內(nèi)容</p><p><b>  } </b></p><p><b>  } </b></p><p>  (3) 統(tǒng)計字符個數(shù)</p><p>  void count()</p>&l

24、t;p><b>  { </b></p><p>  for(j=0;j<len[i];j++) </p><p><b>  { </b></p><p>  if(str[i][j]>='a' && str[i][j]<='z') c

25、num++; //統(tǒng)計小寫字母</p><p>  if(str[i][j]>='A' && str[i][j]<='Z') cnum++; //統(tǒng)計大寫字母</p><p>  if(str[i][j]>='0' && str[i][j]<='9') dnum++; /

26、/統(tǒng)計數(shù)字</p><p>  if(str[i][j]==' ') snum++; //統(tǒng)計空格</p><p><b>  } </b></p><p><b>  } </b></p><p>  (4) 統(tǒng)計指定字符串個數(shù)</p><p>  v

27、oid checkstring() </p><p><b>  { </b></p><p>  char cstr[20]; </p><p>  char *p1,*p2; </p><p>  printf("請輸入需要統(tǒng)計的字符串: "); </p><p&g

28、t;  gets(cstr); </p><p>  p2=cstr; </p><p>  for(i=0;i<N;i++) </p><p><b>  { </b></p><p>  p1=str[i]; </p><p>  while(strstr(p1,p2)!=

29、NULL)//strstr()函數(shù)的原型是:extern char *strstr(char *str1, char *str2);</p><p>  //功能是找出str2字符串在str1字符串中第一次出現(xiàn)的位置(不包括str2的串結(jié)束符)。</p><p><b>  { </b></p><p>  strnum++;

30、 </p><p>  p1=strstr(p1,p2)+1; </p><p><b>  } </b></p><p><b>  } </b></p><p>  printf("字符串:%s 在文章中出現(xiàn)的次數(shù)為:%d \n",cstr,s

31、trnum); </p><p><b>  } </b></p><p>  (5) 刪除指定字符串</p><p>  void outputdelstr() </p><p><b>  { </b></p><p>  char cstr[20]; </

32、p><p>  char *p,*p1,*p2; </p><p>  int len; </p><p>  printf("請輸入要刪除的字符串: "); </p><p>  gets(cstr); </p><p>  len=strlen(cstr); </p>&l

33、t;p>  p2=cstr; </p><p>  for(i=0;i<N;i++) </p><p><b>  { </b></p><p>  p1=str[i]; </p><p>  while(strstr(p1,p2)!=NULL) </p><p><

34、;b>  { </b></p><p>  p=p1=strstr(p1,p2); </p><p>  while(*(p+len-1)) </p><p><b>  { </b></p><p>  *p=*(p+len); </p><

35、;p><b>  p++; </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  printf("刪除字符串:%s 后文章為: \

36、n",cstr); </p><p>  output(); //輸出刪除字符串后的文章</p><p><b>  } </b></p><p>  (6) 替換指定字符串</p><p>  void replace() </p><p><b>  {

37、 </b></p><p>  char cstr[20],rcstr[20]; </p><p>  int clen,rlen;</p><p>  printf("請輸入要替換的字符串:"); </p><p>  gets(cstr); </p><p>  clen=

38、strlen(cstr);</p><p>  printf("請輸入要替換為的字符串:"); </p><p>  gets(rcstr); </p><p>  rlen=strlen(rcstr);</p><p>  for(i=0;i<N;i++) </p><p><b&g

39、t;  { </b></p><p><b>  int len;</b></p><p>  char *p,*p1,*p2,*p3; char newstring[N][80];</p><p>  p1=str[i]; </p><p>  p2=cstr; </p><

40、p>  p3=rcstr; </p><p>  p=strstr(p1,p2);</p><p><b>  while(p)</b></p><p><b>  {</b></p><p>  memset(newstring,0,sizeof(newstring));

41、</p><p><b>  len=p-p1;</b></p><p>  strncpy(newstring[i],p1,len);</p><p>  strcat(newstring[i], p3);</p><p>  strcat(newstring[i],p+strlen(p2));</p>

42、<p>  strcpy(p1,newstring[i]);</p><p>  p=strstr(p1+len+strlen(p2),p2);</p><p><b>  } </b></p><p><b>  }</b></p><p>  printf("替換字符串:%

43、s后文章為:\n",cstr); </p><p>  output(); //輸出替換字符串后的文章</p><p><b>  } </b></p><p><b>  程序代碼</b></p><p>  #include <stdio.h> </

44、p><p>  #include <string.h> </p><p>  #include <stdlib.h> </p><p>  #define N 3 //文章的行數(shù)</p><p>  char str[N][80];//存儲文章的字符數(shù)組 ,為全局變量</p><p>

45、  int i,j; </p><p>  int len[N]; </p><p>  int dnum=0,cnum=0,snum=0,anum=0,strnum=0; //為各變量賦初值</p><p>  void menu(); //菜單顯示函數(shù)</p><p>  int intput(); //文章輸入函數(shù)</

46、p><p>  void output(); //文章輸出函數(shù)</p><p>  void count(); //統(tǒng)計字符個數(shù)函數(shù)</p><p>  void checkstring(); //統(tǒng)計指定字符串個數(shù)函數(shù)</p><p>  void outputdelstr(); //刪除指定字符串函數(shù)</p><p&g

47、t;  void replace();</p><p>  char key,t; </p><p>  int main() //主函數(shù)</p><p><b>  { </b></p><p>  printf("**************************\n");</p&g

48、t;<p>  printf("**************************\n");</p><p>  for(i=0;i<N;i++) </p><p><b>  { </b></p><p>  len[i]=intput(); </p><p>  anu

49、m+=len[i]; </p><p><b>  } </b></p><p>  for(i=0;i<N;i++) </p><p><b>  { </b></p><p>  count();//調(diào)用count()函數(shù) </p><p><b&g

50、t;  } </b></p><p>  while(1) </p><p><b>  { </b></p><p>  printf("**************************\n");</p><p>  printf("*****************

51、*********\n");</p><p>  printf("\n");</p><p>  printf("您輸入的文章為:\n"); </p><p>  output(); //調(diào)用output()函數(shù)</p><p>  printf("\n");</p

52、><p>  printf("文章中的字母個數(shù)為:%d \n",cnum);</p><p>  printf("數(shù)字個數(shù)為:%d \n",dnum);</p><p>  printf("空格個數(shù)為:%d \n",snum);</p><p>  printf("文章總字數(shù)為

53、:%d \n",anum);</p><p>  printf("\n");</p><p>  menu(); //調(diào)用menu()函數(shù)</p><p>  printf("\n"); </p><p>  printf("請輸入操作:"); </p>

54、<p>  key=getchar(); //接收回車</p><p>  printf("\n"); </p><p>  switch(key) </p><p><b>  { </b></p><p>  case '1': //當key=1時執(zhí)行此

55、語句調(diào)用checkstring()函數(shù)</p><p><b>  { </b></p><p>  fflush(stdin);//功能:清空輸入緩沖區(qū),確保不影響后面的數(shù)據(jù)讀取 </p><p>  checkstring(); //調(diào)用checkstring()函數(shù)</p><p><b>  

56、}break; </b></p><p>  case '2': //當key=2時執(zhí)行此語句調(diào)用outputdelstr()函數(shù)</p><p><b>  { </b></p><p>  fflush(stdin); </p><p>  outputdelstr()

57、; // outputdelstr()函數(shù)</p><p><b>  }break; </b></p><p>  case '3': //當key=3時執(zhí)行此語句調(diào)用outputdelstr()函數(shù)</p><p><b>  { </b></p><p> 

58、 fflush(stdin); </p><p>  replace(); // outputdelstr()函數(shù)</p><p><b>  }break; </b></p><p>  case '0': exit(0); //當key=0時執(zhí)行此語句退出系統(tǒng)</p><p>  defaul

59、t: </p><p><b>  { </b></p><p>  printf("此菜單不存在!\n"); </p><p><b>  }break; </b></p><p><b>  } </b></p><

60、p>  t=getchar(); //接收回車</p><p>  system("pause");/*是一個系統(tǒng)函數(shù),調(diào)用“pause”命令,在命令行上輸出“請按任意鍵繼續(xù)”一行文字,等待用戶按一個鍵,然后返回。*/ </p><p><b>  } </b></p><p>  system("pa

61、use");</p><p>  return 0; </p><p><b>  } </b></p><p>  void menu() //菜單顯示函數(shù)</p><p><b>  { </b></p><p>  printf("*****

62、*****************\n");</p><p>  printf("* 菜 單 *\n");</p><p>  printf("**********************\n");</p><p>  printf("* 1---統(tǒng)計字符串 *\n&quo

63、t;);</p><p>  printf("* 2---刪除字符串 *\n");</p><p>  printf("* 3---替換字符串 *\n");</p><p>  printf("* 0---退出系統(tǒng) *\n");</p><p>  pri

64、ntf("**********************\n"); </p><p><b>  } </b></p><p>  int intput() //文章輸入函數(shù)</p><p><b>  { </b></p><p>  printf("請輸入第

65、%d 行文字\n",i+1);</p><p>  gets(str[i]); //讀取數(shù)組的內(nèi)容</p><p>  if(strlen(str[i])>80)</p><p><b>  {</b></p><p>  printf("每行最多輸入80字符,請重新輸入第 %d 行文字\n&q

66、uot;,i+1);</p><p>  /*當每行輸入文字大于80字符時輸出此語句,并且重新輸入文字*/</p><p>  gets(str[i]);</p><p><b>  }</b></p><p>  return strlen(str[i]); //返回數(shù)組的長度?</p><p>

67、;<b>  }</b></p><p>  void output() //文章輸出函數(shù)</p><p><b>  { </b></p><p>  for(i=0;i<N;i++) </p><p><b>  { </b></p><p

68、>  puts(str[i]); //輸出數(shù)組的內(nèi)容</p><p><b>  } </b></p><p><b>  } </b></p><p>  void count() //統(tǒng)計字符個數(shù)的函數(shù)</p><p><b>  { </b></p

69、><p>  for(j=0;j<len[i];j++) </p><p><b>  { </b></p><p>  if(str[i][j]>='a' && str[i][j]<='z') cnum++; //統(tǒng)計小寫字母</p><p>  i

70、f(str[i][j]>='A' && str[i][j]<='Z') cnum++; //統(tǒng)計大寫字母</p><p>  if(str[i][j]>='0' && str[i][j]<='9') dnum++; //統(tǒng)計數(shù)字</p><p>  if(str[i][j

71、]==' ') snum++; //統(tǒng)計空格</p><p><b>  } </b></p><p><b>  } </b></p><p>  void checkstring() //統(tǒng)計指定字符串個數(shù)函數(shù)</p><p><b>  { </b&g

72、t;</p><p>  char cstr[20]; </p><p>  char *p1,*p2; </p><p>  printf("請輸入需要統(tǒng)計的字符串: "); </p><p>  gets(cstr); </p><p>  p2=cstr; </p>

73、<p>  for(i=0;i<N;i++) </p><p><b>  { </b></p><p>  p1=str[i]; </p><p>  while(strstr(p1,p2)!=NULL)//strstr()函數(shù)的原型是:extern char *strstr(char *str1, char *st

74、r2);</p><p>  //功能是找出str2字符串在str1字符串中第一次出現(xiàn)的位置(不包括str2的串結(jié)束符)。</p><p><b>  { </b></p><p>  strnum++; </p><p>  p1=strstr(p1,p2)+1; <

75、/p><p><b>  } </b></p><p><b>  } </b></p><p>  printf("字符串:%s 在文章中出現(xiàn)的次數(shù)為:%d \n",cstr,strnum); </p><p><b>  } </b></p&g

76、t;<p>  void outputdelstr() //刪除指定字符串函數(shù)</p><p><b>  { </b></p><p>  char cstr[20]; </p><p>  char *p,*p1,*p2; </p><p>  int len; </p><

77、;p>  printf("請輸入要刪除的字符串: "); </p><p>  gets(cstr); </p><p>  len=strlen(cstr); </p><p>  p2=cstr; </p><p>  for(i=0;i<N;i++) </p><p>

78、<b>  { </b></p><p>  p1=str[i]; </p><p>  while(strstr(p1,p2)!=NULL) </p><p><b>  { </b></p><p>  p=p1=strstr(p1,p2); <

79、;/p><p>  while(*(p+len-1)) </p><p><b>  { </b></p><p>  *p=*(p+len); </p><p><b>  p++; </b></p><p><b>  } </b></p

80、><p><b>  } </b></p><p><b>  } </b></p><p>  printf("刪除字符串:%s 后文章為: \n",cstr); </p><p>  output(); //輸出刪除字符串后的文章</p><

81、;p><b>  } </b></p><p>  void replace() //替換指定字符串函數(shù)</p><p><b>  { </b></p><p>  char cstr[20],rcstr[20]; </p><p>  int clen,rlen;</p&g

82、t;<p>  printf("請輸入要替換的字符串:"); </p><p>  gets(cstr); </p><p>  clen=strlen(cstr);</p><p>  printf("請輸入要替換為的字符串:"); </p><p>  gets(rcstr); &

83、lt;/p><p>  rlen=strlen(rcstr);</p><p>  for(i=0;i<N;i++) </p><p><b>  { </b></p><p><b>  int len;</b></p><p>  char *p,*p1,*p2,*

84、p3; char newstring[N][80];</p><p>  p1=str[i]; </p><p>  p2=cstr; </p><p>  p3=rcstr; </p><p>  p=strstr(p1,p2);</p><p><b>  while(p)&

85、lt;/b></p><p><b>  {</b></p><p>  memset(newstring,0,sizeof(newstring));</p><p><b>  len=p-p1;</b></p><p>  strncpy(newstring[i],p1,len);<

86、/p><p>  strcat(newstring[i], p3);</p><p>  strcat(newstring[i],p+strlen(p2));</p><p>  strcpy(p1,newstring[i]);</p><p>  p=strstr(p1+len+strlen(p2),p2);</p><p&

87、gt;<b>  } </b></p><p><b>  }</b></p><p>  printf("替換字符串:%s后文章為:\n",cstr); </p><p>  output(); //輸出替換字符串后的文章</p><p><b> 

88、 } </b></p><p><b>  測試方案及結(jié)果</b></p><p><b>  測試方案</b></p><p>  用vc++6.0實現(xiàn)程序功能。</p><p><b>  結(jié)果及分析</b></p><p> ?。?)輸

89、入輸出及統(tǒng)計字符串:</p><p>  (2)統(tǒng)計指定字符串個數(shù):</p><p> ?。?)刪除字符串并輸出刪除后的文章:</p><p> ?。?)替換指定字符串并輸出替換后的文章:</p><p><b> ?。?)退出程序:</b></p><p><b>  結(jié)論及體會<

90、;/b></p><p>  此次課程設計讓我們小組對數(shù)據(jù)結(jié)構(gòu)方面的知識有了更加深入的了解,也使我們認識到自己在學習編程方面還有很多的不足。在課程設計中,我們也遇到了許多的問題,我們通過上網(wǎng)查詢資料,探討,也都一一解決了這些問題。</p><p>  今后我們還要多讀一些編程方面的書籍,不能只拘泥于課本上的知識,并注重理論與實踐的結(jié)合,多上機練習編寫程序,提高自己的實際動手能力和獨立

91、思考的能力,不斷充實自己,更好的掌握編程思想。</p><p><b>  任務分配及貢獻度</b></p><p>  :編寫程序替換部分、整合數(shù)據(jù)、完成實驗報告詳細數(shù)據(jù)部分,</p><p>  表現(xiàn): 優(yōu)。 </p><p>  :編寫程序輸入輸出部分、完成實驗報告總結(jié)及體會部分,</p>&

92、lt;p><b>  表現(xiàn): 良。</b></p><p> ?。壕帉懗绦蚪y(tǒng)計部分、完成實驗報告概述和系統(tǒng)設計部分,</p><p><b>  表現(xiàn): 良。</b></p><p>  :編寫程序刪除部分、完成實驗報告測試方案及結(jié)果部分,</p><p><b>  表現(xiàn): 良。&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論