對于串及其基本操作的課程設計_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  串是一種簡單的數(shù)據(jù)結構,它的邏輯結構與線性表十分相似,區(qū)別僅在于串的數(shù)據(jù)對象是字符集。</p><p>  所以在對于串及其基本操作的課程設計中,在了解了該課程設計的目的和基本要求后,要認真分析該課程設計的題目,然后利用編寫的程序代碼,完成對于串的一系列操作。如:求一個串的串長、聯(lián)接兩個串、求一個串的

2、子串、比較兩個串的大小、將一個串插入另一個串的某一位置、刪除、子串定位和置換。</p><p>  在主函數(shù)中,為了可以更方便地進行各個函數(shù)的檢驗,可以利用菜單使得操作得以繼續(xù)進行,而不必返回以后再進行其他的操作檢驗。</p><p>  最后,給出程序的運行結果,分析改程序的優(yōu)缺點,遇到的問題,然后進行總結。</p><p><b>  目 錄<

3、/b></p><p>  第一章:數(shù)據(jù)結構課程設計目的、基本要求及其解析 </p><p>  1課程設計目的……………………………………………………3</p><p>  課程設計的基本要求………………………………………………3</p><p>  課程設計解析………………………………………

4、………………3</p><p>  第二章:程序設計內(nèi)容</p><p>  1:程序設計的基本思想……………………………………………4</p><p>  2:程序設計的代碼…………………………………………………6</p><p>  3:程序運行結果……………………………………………………12</p><p>  

5、第三章:程序設計的優(yōu)缺點及遇到的問題 </p><p>  1:程序設計的優(yōu)缺點………………………………………………15</p><p>  2設計過程中遇到的問題 …………………………………………15</p><p><b>  第四章:總結</b></p><p>  1:個人總結…………………………………

6、………………………16</p><p>  2:參考文獻…………………………………………………………16</p><p>  第一章:課程設計的目的、基本要求及其解析</p><p><b>  1.課程設計目的:</b></p><p> ?。ǎ保赫莆沾幕敬鎯Y構。</p><p> ?。?/p>

7、2):掌握串的基本運算及其實現(xiàn)。</p><p><b>  2.課程設計要求:</b></p><p> ?。ǎ保簩⑸蠙C程序全部調(diào)試通過。</p><p> ?。ǎ玻航Y合程序分析運行結果。</p><p>  3.課程設計題目解析:</p><p>  顧名思義,串及其基本操作,就是要在理解

8、串的概念和特征的基礎上,了解串的內(nèi)部表示和處理方法。這樣才能有效地實現(xiàn)串的基本操作。串,也還是字符串,是一種特殊的線性表。特殊之處就在于表中的每一個元素都是字符,以及由此而要求的一些特殊操作。在串及其基本操作中,要求的操作有連接、求串長、求子串、比較串的大小、插入、刪除、子串定位和置換。因為所要進行的操作比較零散也比較多,所以就用多個函數(shù)來把這個整體的課程設計劃分成多個模塊來進行。每個函數(shù)對應一個功能。在主函數(shù)中,用一個菜單,就可以將原

9、本已分塊的函數(shù)系統(tǒng)化地進行檢驗。在設計的過程中,根據(jù)課程設計的目的和基本要求,注意一些容易錯誤的問題,</p><p>  第二章:課程設計內(nèi)容</p><p>  1.程序設計的基本思想:(對于串及其基本操作中,程序被分割成很多的模塊。所以以下的程序設計思想也分成幾個小方面闡述)</p><p>  求字符串串長:在該函數(shù)中,要先定義一個整型變量i=0,同時對于形

10、參s,從它的第一個元素開始掃描,當s[i]不等于”\0”時,i++,最后返回i的值。i的值即為所求的字符串的長度。</p><p>  求字符串的連接:在該函數(shù)中,會有兩個形參s和b,即把b連接到s后面。這里需要 定義兩個整型變量i=0和j=0,先對s進行掃描,當s[i]中的元素等于”\0”時,i++。一直掃描到s[i]等于”\0”時,對b進行掃描,當b[j]也不等于”\0”的時候,把對b掃描到的第一個元素b[j

11、]賦值給s的該i位置。然后i++,j++.然后仍是接著把b[j]賦值給s[i]。最后,因為所有指針的最后一個元素都是”\0”,這時i已經(jīng)進行了子加的運算,所以直接給s[i]賦值一個”\0”。最后所得的s即為所求的原來的兩個字符s與b的連接。</p><p>  求子串:該函數(shù)中有三個形參,但一個是字符串s,另外兩個分別是整型的i和j。在函數(shù)內(nèi),還要定義兩個整型變量k和p=0,用一個for循環(huán),“for(k=i-1

12、;k<i+j-1;k++)”,for循環(huán)下所要做的就是把s[k]賦值給s[p],p++,最后再給s[p]賦值一個”\0”,也就是把原本的s中的元素從第i個開始連續(xù)j個作為一個新的字符串賦值給s,s也就是所要求的子串。</p><p>  比較兩個串的大小:同樣的,該函數(shù)中也有兩個形參,字符串s和b,在函數(shù)中定義一個整型變量i=0,同時對s和b進行掃描,當s[i]和b[i]都不等于”\0”時,用while循環(huán)

13、,s[i]=b[i]時,i++,要是s[i]>b[i]的話,就輸出”s[i]>b[i]”,返回值為1,要是s[i]<b[i]的話,就輸出”s[i]<b[i]”,返回值為-1,若一直比較到一個的元素為”\0”之前,仍沒有比較出結果的,就可以利用上面的求串長的函數(shù)了。這時,若s的串長大于b,就輸出”s[i]>b[i]”,返回值為1;若s的串長小于b的話,就輸出”s[i]<b[i]”,返回值為-1;若仍相等

14、,則說明s與b相等,輸出”s=b”,返回值為0.</p><p>  求插入:該函數(shù)中有三個形參,兩個是字符串s與b,一個是整型形參i。即把b插入到s的第i個元素之后。在函數(shù)中,定義三個整型變量k,j,m,其中m的值就等于b的串長,用一個for循環(huán),”for(k=strlen1(s);k>i-1;k--)”,滿足循環(huán)條件要進行的操作是把s[k]賦值給s[k+strlen1(b)],就是讓s是中空出等于b的長

15、度的空間,好讓b可以插入。下面再用一個for循環(huán),”for(k=0,j=i;b[k]!='\0';k++,j++)”,再把b[k]賦值給s[j],這樣的把b插入到了s中。最后,給s[m+strlen1(b)]賦值一個”\0”,這時的s就是所求的新的字符串。</p><p>  求刪除:該函數(shù)也有三個形參,一個是字符串s,兩個是整型形參i和j,在函數(shù)中定義一個整型變量k,把i賦值給k,對字符串s求

16、串長,函數(shù)中用for循環(huán),for(k=i;;k<strlen1(s);k++),把s[k+j]賦值給s[k],即用覆蓋的方式刪除從第i個元素開始的連續(xù)j個元素,最后再把”\0”賦值給s[k]。s就是所求的刪除從第i個元素開始連續(xù)j個元素后的新的字符串。</p><p>  子串定位:這個函數(shù)有兩個形參,s和b,在函數(shù)內(nèi)部,還要定義兩個整型變量,i=0和j=0,用一個for循環(huán),for“(i=0;i<s

17、trlen1(s)&&b[j]!='\0';i++)”,滿足后進行的操作是檢驗對應的s和b的元素是否相等。相等時j++,接著往下掃描。都相等時,用i減去b的串長就是b作為子串在s中的定位位置。若有不相等時,就重新把j賦值為0,往下掃描時,就從b的第一個元素再接著掃描。 </p><p>  求置換:這個函數(shù)中有四個形參,兩個字符串s和b,兩個整型形參i和j,在函數(shù)內(nèi)部還要定義兩個整

18、型變量m和k。先要判斷b和將要被置換的字符串的串長關系。如果剛好相等,就讓s從i個元素開始,b從第一個元素開始,一一賦值。如果b的串長比較大,則用一個for循環(huán),“for(k=strlen1(s);k>=i+j-1;k--)”,把s[k]賦值給s[k-j+strlen1(b)],這樣剩余的空間就剛好可以用來存放b。同樣的,如果b的串長比較小,同樣用以惡搞for循環(huán),“for(k=i+j-1,m=i;s[k]!='\0

19、9;;k++,m++)”,s[k]賦值給s[m+strlen1(b)-1],剩余的空間也是剛好用來存放b的。然后,把b中的元素對應地賦值給s。最后,在s的最后一個元素后賦值一個“\0”。這時的s,就是b置換后的新的字符串。</p><p>  主函數(shù):在主函數(shù)中,因為要最多要輸入兩個字符串,所以要先定義兩個字符串s和b。有的函數(shù)需要用到整型的變量,最多是兩個,所以也要定義兩個整型變量k和a。因為函數(shù)中,有很多個功

20、能不同的函數(shù),這樣就會要求驗證很多次,所以這里我們考慮用菜單來實現(xiàn)。用一個while循環(huán),循環(huán)的條件為永真,這樣當做完一個函數(shù)的驗證時,系統(tǒng)就會自動讓你接著選擇。在while下,輸入一個數(shù)字。每個數(shù)字代表不同的功能。然后用一個switch語句,不同的case對應不同的函數(shù),case(0)就可以代表推出系統(tǒng)。</p><p><b>  2.程序設計代碼:</b></p><

21、;p>  #include <stdio.h> /*頭文件*/</p><p>  #include<stdlib.h></p><p>  int strlen1(char s[]) /*求串長的函數(shù)*/</p><p><b>  {</b></p><p><b&g

22、t;  int i=0;</b></p><p>  while(s[i]!='\0')</p><p><b>  i++;</b></p><p><b>  return i;</b></p><p><b>  }</b></p>

23、<p>  void strcat1(char s[20],char b[]) /*求連接的函數(shù)*/</p><p><b>  {</b></p><p>  int i=0,j=0;</p><p>  while(s[i]!='\0')</p><p><b>  i+

24、+;</b></p><p>  while(b[j]!='\0')</p><p><b>  {</b></p><p>  s[i]=b[j];</p><p><b>  i++;</b></p><p><b>  j++;&l

25、t;/b></p><p><b>  }</b></p><p>  s[i]='\0';</p><p><b>  puts(s);</b></p><p><b>  }</b></p><p>  void substr(

26、char s[],int i,int j) /*求子串的函數(shù)*/</p><p><b>  {</b></p><p>  int k,p=0;</p><p>  for(k=i-1;k<i+j-1;k++)</p><p><b>  {</b></p><p&g

27、t;  s[p]=s[k];</p><p><b>  p++;</b></p><p><b>  }</b></p><p>  s[p]='\0';</p><p><b>  puts(s);</b></p><p><b

28、>  }</b></p><p>  int strcmp1(char s[],char b[]) /*比較串大小的函數(shù)*/</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  while(s[i]!='

29、;\0'&&b[i]!='\0')</p><p><b>  {</b></p><p>  if(s[i]==b[i]) i++;</p><p>  else if(s[i]>b[i])</p><p><b>  {</b></p>

30、<p>  printf("s>b");</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b&

31、gt;</p><p>  printf("s<b");</p><p>  return -1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(strlen1(s)>strlen1(

32、b)) </p><p><b>  { </b></p><p>  printf("s>b");</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  else

33、if(strlen1(s)<strlen1(b)) </p><p><b>  { </b></p><p>  printf("s<b");</p><p>  return -1;</p><p><b>  }</b></p><p>

34、<b>  else </b></p><p><b>  {</b></p><p>  printf("s=b");</p><p><b>  return 0;</b></p><p><b>  }</b></p>

35、<p><b>  }</b></p><p>  void insert(char s[20],int i,char b[]) /*求插入的函數(shù)*/</p><p><b>  {</b></p><p>  int k,j,m=strlen1(s);</p><p>  f

36、or(k=strlen1(s)-1;k>i-1;k--)</p><p>  s[k+strlen1(b)]=s[k];</p><p>  for(k=0,j=i;b[k]!='\0';k++,j++)</p><p>  s[j]=b[k];</p><p>  s[m+strlen1(b)]='\0'

37、;;</p><p><b>  puts(s);</b></p><p><b>  }</b></p><p>  void delete1(char s[],int i,int j)/*求刪除的函數(shù)*/</p><p><b>  {</b></p><

38、;p><b>  int k;</b></p><p>  for(k=i;k<strlen1(s);k++)</p><p>  s[k]=s[k+j];</p><p>  s[k]='\0';</p><p><b>  puts(s);</b></p>

39、<p><b>  }</b></p><p>  int index(char s[],char b[]) /*求子串定位的函數(shù)*/</p><p><b>  {</b></p><p>  int i,j=0;</p><p>  for(i=0;i<strlen1(

40、s)&&b[j]!='\0';i++)</p><p>  if(s[i]==b[j])</p><p><b>  j++;</b></p><p><b>  else j=0;</b></p><p>  if(j==strlen1(b))</p>

41、<p>  return (i-strlen1(b));</p><p>  else return 0;</p><p><b>  }</b></p><p>  void replace(char s[20],int i,int j,char b[])/*求置換的函數(shù)*/</p><p><b&g

42、t;  {</b></p><p><b>  int k,m;</b></p><p>  if(j<strlen1(b))</p><p><b>  {</b></p><p>  for(k=strlen1(s);k>=i+j-1;k--)</p>&l

43、t;p>  s[k-j+strlen1(b)]=s[k];</p><p><b>  }</b></p><p>  else if(j>strlen1(b))</p><p><b>  {</b></p><p>  for(k=i+j-1,m=i;s[k]!='\0

44、9;;k++,m++)</p><p>  s[m+strlen1(b)-1]=s[k];</p><p><b>  }</b></p><p>  for(m=0,k=i-1;b[m]!='\0';k++,m++)</p><p>  s[k]=b[m];</p><p>  

45、s[strlen1(s)+strlen1(b)-j]='\0'; /*在串的最后賦值“\0”*/ </p><p><b>  puts(s);</b></p><p><b>  }</b></p><p>  void main() /*主函數(shù)*/</p><p>&

46、lt;b>  {</b></p><p><b>  int a,k;</b></p><p>  char s[20],b[10];</p><p>  while(1) /*條件永真*/</p><p><b>  {</b></p><p>  

47、printf("\n1為求串長,2為連接串,3為比較大小,4為置換字符,5為子串定位,6求子串,7字符串插入,8為刪除字符串,0為退出:"); /*選擇菜單*/</p><p>  scanf("%d",&a);</p><p><b>  switch(a)</b></p><p>&

48、lt;b>  {</b></p><p><b>  case 1:</b></p><p>  printf("請輸入一個字符");</p><p>  scanf("%s",s);</p><p>  k=strlen1(s); /*求s的串長*/<

49、;/p><p>  printf("%d",k);</p><p><b>  break;</b></p><p>  case 2:printf("請輸入兩個字符");</p><p>  scanf("%s",s);</p><p> 

50、 scanf("%s",b);</p><p>  strcat1(s,b);</p><p><b>  break;</b></p><p>  case 3:printf("請輸入兩個字符");</p><p>  scanf("%s",s);</p

51、><p>  scanf("%s",b);</p><p>  k=strcmp1(s,b);</p><p>  printf("%d",k);</p><p><b>  break;</b></p><p>  case 4:printf("請輸

52、入兩個字符");</p><p>  scanf("%s",s);</p><p>  scanf("%s",b);</p><p>  replace(s,3,4,b);</p><p><b>  break;</b></p><p>  ca

53、se 5:printf("請輸入兩個字符");</p><p>  scanf("%s",s);</p><p>  scanf("%s",b);</p><p>  k=index(s,b);</p><p>  printf("%d",k);</p>

54、;<p><b>  break;</b></p><p>  case 6:printf("請輸入1個字符");</p><p>  scanf("%s",s);</p><p>  substr(s,3,4);</p><p><b>  break;&

55、lt;/b></p><p>  case 7:printf("請輸入兩個字符");</p><p>  scanf("%s",s);</p><p>  scanf("%s",b);</p><p>  insert(s,3,b);</p><p>&

56、lt;b>  break;</b></p><p>  case 8:printf("請輸入一個字符 ");</p><p>  scanf("%s",s);</p><p>  delete1(s,2,4);</p><p><b>  break;</b>&l

57、t;/p><p>  case 0:exit(0);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  3.程序運行結果:</b><

58、/p><p>  1)求串長的程序運行結果:</p><p>  2)連接兩個串的程序運行結果:</p><p>  3)比較兩個串的大小的程序運行結果:(為了確保程序的正確性,所以就多進行幾次會使結果不同的串的比較,以下就是比較的結果)</p><p>  4)置換字符的程序運行結果:(以下是三種不同的置換結果。三種置換方式分別是用來置換的字符

59、串比被置換的字符串的串長短、用來置換的字符串的串長和被置換的串的串長相等、用來置換的字符串的串長比被置換的字符串的串長長)</p><p>  5)子串定位的程序運行結果:(如同比較字符串的大小一樣,同樣為了確保程序的正確性,因此選擇子串定位兩次,獲得兩種不同的結果)</p><p>  6)求子串的程序運行結果:</p><p>  7)求將第一個字符串插入第二個

60、字符串某一位置的程序運行結果:</p><p>  8)將一串字符的某一位置起的連續(xù)幾個字符刪除的程序運行結果:</p><p>  第四章:課程設計的優(yōu)缺點及遇到的問題</p><p>  1.課程設計的優(yōu)缺點:</p><p>  優(yōu)點:對于串中的簡單的基本的操作幾乎都可以實現(xiàn)。對于串的操作包括了連接、求串長、求子串、比較串的大小、插入、

61、刪除、子串定位和置換。而且在最后的主函數(shù)中,應用了菜單,使得對于程序的檢驗變得簡單,容易執(zhí)行。</p><p>  缺點:對于某些具體的應用,比較串的大小,僅僅能比較兩個,如果是多個串的比較,則不能應用。即只能較簡單的應用,應付不了較復雜的要求。</p><p>  2.課程設計過程中遇到的問題:</p><p> ?。涸谶M行串的連接時應注意,連接是把后面的一個串連

62、接到前面的串后,所以連接是不滿足交換的。</p><p>  :在比較兩個串的大小時,當比較開始,兩個串元素都不為空,比較繼續(xù)進行,s大于b,s小于b,但除此之外,并不能說s就等于b了,這個時候還要考慮此時的s或b中的元素是不是已經(jīng)有為“\0”的了。如果有,則說明兩個串自此之前是相等的,這時只要比串長就可以了。哪一個的串長大,哪一個串就比較大。如果仍然相等,這時才能說明s和b是相等的。</p>&l

63、t;p>  :對于有些字符串的形參,有的不需要規(guī)定空間,但有的必須給定空間. 如串的連接,把一個串插入另一個串等.因為,如果不給定空間大小,這時系統(tǒng)就會根據(jù)實參的大小自動分配空間.這時若想在這個串中增加字符,空間就會不夠。</p><p> ?。涸谧哟ㄎ粫r,掃描的串中的某一個元素與子串中的第一個元素相同,接著往下掃描,若都相同時,才可以說明串中出現(xiàn)的子串中的第一個元素的位置是子串位置。但如果后面的元素有不

64、相同的,則子串中的元素掃描必須回到第一個元素的位置開始重新掃描。</p><p> ?。涸谶M行置換時,重點要考慮是用來置換的串與它所要置換的一串字符的長度的關系。如果剛好相等,則置換可以簡單順利的進行。但如果不相等,就要根據(jù)后面用來置換的串的長度來具體解決。</p><p> ?。涸诖倪B接和求子串時,在串的最后要注意不能忘記賦值”\0”。因為每個字符串的結束標志都是”\0”。</p

65、><p> ?。鹤詈缶褪窃谥骱瘮?shù)中,應用菜單,使檢驗變得簡單。</p><p><b>  第四章:總結</b></p><p><b>  1.個人總結:</b></p><p>  通過此次對于串及其基本操作的課程設計,除了多了解了串的基本概念、特征,還可以了解到對于串的基本操作的應用是十分廣泛的,

66、凡是涉及到字符處理的都要用到串的基本操作。在程序的設計過程中,除了要把程序完整地編寫出來,還要考慮把程序簡單化。同時,還要考慮程序中的函數(shù)與函數(shù)之間還可以相互調(diào)用,從而簡化程序,也提高了函數(shù)的可用性。同時也要注意,在編寫程序的過程中,有很多問題是不容易發(fā)現(xiàn)的,有時,需要在程序運行是時候才能被發(fā)現(xiàn)??隙ǖ?,程序中肯定存在著這樣那樣的缺陷,所以要盡可能地使程序完善,修改不盡完美的地方。</p><p>  2.參考文

溫馨提示

  • 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

提交評論