c++課程設(shè)計報告--字符串處理_第1頁
已閱讀1頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課程名稱 C++課程設(shè)計 </p><p>  教師姓名 </p><p>  本科生姓名 </p><p>  本科生學(xué)號 </p><p>  本科生專業(yè) 網(wǎng)絡(luò)工程 </p>&

2、lt;p>  所在院系 計算機學(xué)院 </p><p>  日期: 2012年7月7日 </p><p><b>  課程設(shè)計評語</b></p><p>  注:1、無評閱人簽名成績無效;</p><p>  2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;</p>

3、<p>  3、如有平時成績,必須在上面評分表中標出,并計算入總成績。</p><p><b>  目 錄</b></p><p>  封面··················&#

4、183;····································

5、·········1</p><p>  課程設(shè)計評語······················

6、3;·································2</p><p&g

7、t;  目 錄···································

8、83;···························3</p><p>  1.課程論文題目····

9、;····································

10、83;············4</p><p>  2.程序設(shè)計思路···················

11、;··································4</p>&l

12、t;p>  3.功能模塊圖··································

13、·····················5</p><p>  4.模塊分析··········

14、3;····································&#

15、183;·········6</p><p>  5.程序代碼······················

16、··································8</p><

17、;p>  6.運行結(jié)果··································&#

18、183;·····················14</p><p>  遇到的困難及解決方法·········&

19、#183;···································18<

20、;/p><p>  8.心得體會································&#

21、183;·······················18</p><p>  致謝········

22、83;····································&

23、#183;···················18</p><p>  10參考文獻···········

24、3;····································&#

25、183;·······18</p><p><b>  課程題目:</b></p><p><b>  題目:字符串處理</b></p><p><b>  要求:</b></p><p>  1.strcp

26、y函數(shù)</p><p>  2.strncpy函數(shù)</p><p>  3.strcat函數(shù) </p><p>  4.strncat函數(shù)</p><p>  5.strlwen函數(shù)</p><p>  6.strupr函數(shù)</p><p>  7.strlwr函數(shù)</p>

27、<p><b>  設(shè)計思路:</b></p><p>  該題目要求實現(xiàn)七個功能,既要求編寫七個函數(shù)來分別實現(xiàn)。利用分裝的設(shè)計思路我把各個函數(shù)的聲明放到**.h文件里面,將函數(shù)的定義放在一個**.cpp文件里面,最后將main函數(shù)放在一個**.cpp文件里面,通過main函數(shù)去調(diào)用不同的函數(shù)同時編寫一個菜單函數(shù)來進行對具體調(diào)用哪個函數(shù)來進行選擇,實現(xiàn)不同的功能。</p>

28、;<p><b>  3.功能模塊:</b></p><p><b>  模塊分析</b></p><p> ?。?)Mystrcpy模塊</p><p>  實現(xiàn)目的是將數(shù)組s1的元素全部復(fù)制給s1.利用的方法是通過while循環(huán)逐位讀取s1的元素,只要不為'\0'就將其復(fù)制給s1。需注意的

29、是要在s2結(jié)尾處添加'\0'以結(jié)束其復(fù)制。</p><p>  char* Mystring::Mystrcpy(char s1[],char s2[]) {</p><p><b>  int i=0;</b></p><p>  while(s1[i]!='\0')</p><p> 

30、 {s2[i]=s1[i];</p><p><b>  i++;}</b></p><p>  s2[i]='\0'; //strcpy完成后輸入'\0'結(jié)束S2</p><p>  cout << s2 <<endl << "已完成Mystrcpy"

31、; << endl;</p><p>  return s2;</p><p><b>  }</b></p><p>  Mystrncpy模塊</p><p>  該模塊實現(xiàn)功能與Mystrcpy模塊相似,但是其復(fù)制時要滿足從規(guī)定的地方開始復(fù)制。所以,在此我添加了復(fù)制位數(shù)n以實現(xiàn)控制功能。利用for語句來

32、控制其能夠在第n位停止。</p><p>  char* Mystring::Mystrncpy(char s1[],char s2[]) {</p><p>  cout << "請輸入復(fù)制位數(shù)n" << endl;</p><p><b>  int n;</b></p><p

33、>  cin >> n; //控制strncpy長度</p><p>  for(int i=0;i<n;i++) ///直到第n位循環(huán)結(jié)束</p><p>  s2[i]=s1[i];</p><p>  s2[i]='\0';</p><p>  cout << s2 <&

34、lt; endl << "已完成Mystrncpy" << endl;</p><p>  return s2;</p><p><b>  }</b></p><p>  Mystrcat模塊</p><p>  該模塊實現(xiàn)功能是將數(shù)組s1接到s2后面。于是我利用strcpy

35、模塊的方式從s2的結(jié)尾處開始復(fù)制。只是要實現(xiàn)這一功能必須獲取s2數(shù)組的長度,通過while循環(huán)來獲取。</p><p>  char* Mystring::Mystrcat(char s1[],char s2[]) {</p><p><b>  int j=0;</b></p><p>  while(s2[j]!='\0')

36、</p><p>  j ++; //while循環(huán)獲得s2[]字符長度,該處不能直接利用sizeof來獲取,因為sizeof是建立在string庫基礎(chǔ)上的</p><p><b>  int i=0;</b></p><p>  while(s1[i]!='\0') {</p><p>  while

37、((s2[j]=s1[i])!='\0'){</p><p>  //s2[j]=s1[i];</p><p><b>  j++;</b></p><p><b>  i++;}}</b></p><p>  //s2[j]='\0';</p><

38、;p>  cout << s2 << endl << "已完成Mystrcat"<< endl;</p><p>  return s2;</p><p><b>  }</b></p><p>  Mystrncat模塊</p><p>  與M

39、ystrcat模塊類似,只是要求能夠控制連接長度,于是輸入長度a來控制。</p><p>  char* Mystring::Mystrncat(char s1[],char s2[]) {</p><p><b>  int i=0;</b></p><p>  while(s1[i]!='\0')</p>&l

40、t;p><b>  {</b></p><p>  cout << "請輸入Mystrncat長度a" << endl;</p><p><b>  int a;</b></p><p>  cin >> a; //控制strncat長度</p>

41、<p>  while((s2[a]=s1[i])!='\0'){</p><p>  //s2[a]=s1[i];</p><p><b>  a++;</b></p><p><b>  i++;}}</b></p><p>  //s2[a]='\0

42、9;;</p><p>  cout << s2 << endl << "已完成Mystrncat" << endl;</p><p>  return s2;</p><p><b>  }</b></p><p> ?。?)Mystrlen模塊&l

43、t;/p><p>  該模塊較為簡單,前面的模塊中也有用到即利用while循環(huán)來實現(xiàn)讀取長度。</p><p>  void Mystring::Mystrlen(char s[]) {</p><p><b>  int j=0;</b></p><p>  while(s[j]!='\0') {</

44、p><p><b>  j++;</b></p><p>  } //通過while循環(huán)獲取數(shù)組s2[]長度</p><p>  cout << j << endl << "已完成Mystrlen" <<endl;</p><p><b> 

45、 }</b></p><p>  Mystrupr模塊</p><p>  該模塊實現(xiàn)功能是將小寫字母轉(zhuǎn)換成大寫字母。此處采用方式是對各元素進行ASCII位置移動。</p><p>  void Mystring::Mystrupr(char str1[])</p><p><b>  {</b></p

46、><p>  char *s = str1; //指針s指向str1[]首地址</p><p>  for(int i=0;str1[i]!='\0';i++){</p><p>  if(*(s+i)>=957&& *(s+i)<=122){ ///判斷是否在小寫字母區(qū)間內(nèi),在執(zhí)行替換功能;不在直接跳過<

47、;/p><p>  *(s+i)-=32;</p><p><b>  }</b></p><p>  } </p><p>  //while (*s != '\0')</p><p><b>  //{</b></p&

48、gt;<p>  // if (*s >= 'a' && *s <= 'z') //控制*s范圍</p><p>  // *s -= 0x20; //通過移動指針位置改變其所指內(nèi)容</p><p>  // s ++;

49、 //移向下一位</p><p><b>  // }</b></p><p>  cout << str1 << endl << "已完成Mystrupr" << endl;</p><p><b>  }</b></p&g

50、t;<p>  Mystrlwr模塊</p><p>  該模塊是Mystrlwr模塊的逆過程,將大寫字母替換為小寫字母。</p><p>  void Mystring::Mystrlwr(char str2[])</p><p><b>  {</b></p><p>  char *s = str2;

51、</p><p>  for(int i=0;str2[i]!='\0';i++){</p><p>  if(*(s+i)>=65 && *(s+i)<=90){</p><p>  *(s+i)+=32;</p><p><b>  }</b></p><

52、;p><b>  }</b></p><p>  cout << str2 << endl << "已完成Mstrlwr" << endl;</p><p><b>  }///:~</b></p><p><b>  程序代碼</b

53、></p><p>  ...........................................................................................................................................Mystring.h</p><p>  //:Mystring.h</p&g

54、t;<p>  //Mystring classes</p><p>  #ifndef MYSTRING_H</p><p>  #define MYSTRING_H</p><p>  class Mystring{</p><p><b>  public:</b></p><p&

55、gt;  Mystring();</p><p>  ~Mystring();</p><p><b>  menu();</b></p><p>  char* Mystrcpy(char s1[],char s2[]);</p><p>  char* Mystrncpy(char s1[],char s2[]);&

56、lt;/p><p>  char* Mystrcat(char s1[],char s2[]);</p><p>  char* Mystrncat(char s1[],char s2[]);</p><p>  void Mystrlen(char s[]);</p><p>  void Mystrupr(char str1[]);</

57、p><p>  void Mystrlwr(char str2[]);</p><p><b>  };</b></p><p>  #endif //MYSTRING_H ///:~</p><p>  ...........................................................

58、.........................................................................Mystring.cpp</p><p>  //:Mystring.cpp</p><p>  //Mystring.cpp</p><p>  #include "Mystring.h"</p

59、><p>  #include <cassert></p><p>  #include <iostream></p><p>  using namespace std;</p><p>  Mystring::Mystring() {</p><p><b>  }</b>

60、</p><p>  Mystring::~Mystring() {</p><p><b>  }</b></p><p>  /*****Mystrcpy*****/</p><p>  char* Mystring::Mystrcpy(char s1[],char s2[]) {</p><p&

61、gt;<b>  int i=0;</b></p><p>  while(s1[i]!='\0')</p><p>  {s2[i]=s1[i];</p><p><b>  i++;}</b></p><p>  s2[i]='\0'; //strcpy完成

62、后輸入'\0'結(jié)束S2</p><p>  cout << s2 <<endl << "已完成Mystrcpy" << endl;</p><p>  return s2;</p><p><b>  }</b></p><p>  /*

63、****Mystrncpy*****/</p><p>  char* Mystring::Mystrncpy(char s1[],char s2[]) {</p><p>  cout << "請輸入復(fù)制位數(shù)n" << endl;</p><p><b>  int n;</b></p>

64、<p>  cin >> n; //控制strncpy長度</p><p>  for(int i=0;i<n;i++)</p><p>  s2[i]=s1[i];</p><p>  s2[i]='\0';</p><p>  cout << s2 << endl

65、 << "已完成Mystrncpy" << endl;</p><p>  return s2;</p><p><b>  }</b></p><p>  /*****Mystrcat*****/</p><p>  char* Mystring::Mystrcat(char

66、 s1[],char s2[]) {</p><p><b>  int j=0;</b></p><p>  while(s2[j]!='\0')</p><p>  j ++; //while循環(huán)獲得s2[]字符長度</p><p><b>  int i=0;</b><

67、/p><p>  while(s1[i]!='\0') {</p><p>  while((s2[j]=s1[i])!='\0'){</p><p>  //s2[j]=s1[i];</p><p><b>  j++;</b></p><p><b>  

68、i++;}}</b></p><p>  //s2[j]='\0';</p><p>  cout << s2 << endl << "已完成Mystrcat"<< endl;</p><p>  return s2;</p><p><b&

69、gt;  }</b></p><p>  /*****Mystrncat*****/</p><p>  char* Mystring::Mystrncat(char s1[],char s2[]) {</p><p><b>  int i=0;</b></p><p>  while(s1[i]!=

70、9;\0')</p><p><b>  {</b></p><p>  cout << "請輸入Mystrncat長度a" << endl;</p><p><b>  int a;</b></p><p>  cin >> a;

71、 //控制strncat長度</p><p>  while((s2[a]=s1[i])!='\0'){</p><p>  //s2[a]=s1[i];</p><p><b>  a++;</b></p><p><b>  i++;}}</b></p><p

72、>  //s2[a]='\0';</p><p>  cout << s2 << endl << "已完成Mystrncat" << endl;</p><p>  return s2;</p><p><b>  }</b></p>&l

73、t;p>  /*****Mystrlen*****/</p><p>  void Mystring::Mystrlen(char s[]) {</p><p><b>  int j=0;</b></p><p>  while(s[j]!='\0') {</p><p><b>  j

74、++;</b></p><p>  } //通過while循環(huán)獲取數(shù)組s2[]長度</p><p>  cout << j << endl << "已完成Mystrlen" <<endl;</p><p><b>  }</b></p><

75、p>  /*****Mystrupr*****/</p><p>  void Mystring::Mystrupr(char str1[])</p><p><b>  {</b></p><p>  char *s = str1; //指針s指向str1[]首地址</p><p>  for(int

76、 i=0;str1[i]!='\0';i++){</p><p>  if(*(s+i)>=95 && *(s+i)<=122){</p><p>  *(s+i)-=32;</p><p><b>  }</b></p><p>  } &

77、lt;/p><p>  //while (*s != '\0')</p><p><b>  //{</b></p><p>  // if (*s >= 'a' && *s <= 'z') //控制*s范圍</p><p>  //

78、 *s -= 0x20; //通過移動指針位置改變其所指內(nèi)容</p><p>  // s ++; //移向下一位</p><p><b>  // }</b></p><p>  cout << str1 << e

79、ndl << "已完成Mystrupr" << endl;</p><p><b>  }</b></p><p>  /*****Mystrlwr*****/</p><p>  void Mystring::Mystrlwr(char str2[])</p><p><

80、;b>  {</b></p><p>  char *s = str2;</p><p>  for(int i=0;str2[i]!='\0';i++){</p><p>  if(*(s+i)>=65 && *(s+i)<=90){</p><p>  *(s+i)+=32;&

81、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  cout << str2 << endl << "已完成Mstrlwr" << endl;</p><p><b>  }

82、///:~</b></p><p>  ..................................................................................................................................MstringTest.cpp</p><p>  //MystringTest

83、.cpp</p><p>  #include "Mystring.h"</p><p>  #include <iostream></p><p>  #include <fstream></p><p>  using namespace std;</p><p>  v

84、oid menu()</p><p><b>  {</b></p><p><b>  int w1;</b></p><p><b>  char n;</b></p><p>  /*變量n保存選擇菜單數(shù)字,w1判斷輸入的數(shù)字是否在功能菜單對應(yīng)數(shù)字范圍內(nèi)*/</p&

85、gt;<p>  system("cls");</p><p><b>  do</b></p><p><b>  {</b></p><p>  cout<<"****************************************************

86、********"<<endl;</p><p>  cout<<" ***************** 總菜單 *****************"<<endl;</p><p>  cout<<" *** 1.Mystrcpy

87、 ***"<<endl;</p><p>  cout<<" *** 2.Mystrncpy ***"<<endl;</p><p>  cout<<" *** 3.Mystrcat

88、 ***"<<endl;</p><p>  cout<<" *** 4.Mystrncat ***"<<endl;</p><p>  cout<<" *** 5.Mystrlen

89、 ***"<<endl;</p><p>  cout<<" *** 6.Mystrupr ***"<<endl;</p><p>  cout<<" *** 7.Mystlwr

90、 ***"<<endl;</p><p>  cout<<" *** 8.退出 ***"<<endl;</p><p>  cout<<"************************

91、************************************"<<endl;</p><p>  cout<<"選擇要進行的功能代號(1-8):";</p><p><b>  cin>>n;</b></p><p>  if(n<'1'||n&

92、gt;'8') /*對選擇的數(shù)字作判斷*/</p><p><b>  {</b></p><p><b>  w1=1;</b></p><p>  cout<<"??? 請輸入數(shù)字 1~8!"<<endl;</p

93、><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Mystring x;</p><p><b>  w1=0;</b></p>&

94、lt;p><b>  /*選擇功能*/</b></p><p><b>  switch(n)</b></p><p><b>  {</b></p><p>  case '1':{</p><p>  cout << "請輸入數(shù)組

95、s1[],s2[]" << endl;</p><p>  char s1[100];</p><p>  cin >> s1;</p><p>  char s2[100];</p><p>  cin >> s2;</p><p>  x.Mystrcpy(s1,s2)

96、;break;</p><p>  } /*strcpy模塊*/</p><p>  case '2':{</p><p>  cout << "請輸入數(shù)組s1[],s2[]" << endl;</p><p>

97、  char s1[100];</p><p>  cin >> s1;</p><p>  char s2[100];</p><p>  cin >> s2;</p><p>  x.Mystrncpy(s1,s2);break;</p><p>  }

98、 /*strncpy模塊*/</p><p>  case '3':{</p><p>  cout << "請輸入數(shù)組s1[],s2[]" << endl;</p><p>  char s1[100];</p><p>  cin >>

99、; s1;</p><p>  char s2[100];</p><p>  cin >> s2;</p><p>  x.Mystrcat(s1,s2);break;</p><p>  } /*strcat模塊*/</p><p>

100、;  case '4':{</p><p>  cout << "請輸入數(shù)組s1[],s2[]" << endl;</p><p>  char s1[100];</p><p>  cin >> s1;</p><p>  char s2[100];</p>

101、<p>  cin >> s2;</p><p>  x.Mystrncat(s1,s2);break;</p><p>  } /*strncat模塊*/</p><p>  case '5':{</p><p>  cout

102、<<"請輸入數(shù)組s[]" << endl;</p><p>  char s[100];</p><p><b>  cin >> s;</b></p><p>  x.Mystrlen(s);break;</p><p>  }

103、 /*strlen模塊*/</p><p>  case '6':{</p><p>  cout << "請輸入數(shù)組小寫str1[]" << endl;</p><p>  char str1[100];</p><p>  cin >

104、> str1;</p><p>  x.Mystrupr(str1);break;</p><p>  } /*strupr模塊*/</p><p>  case '7':{</p><p>  cout << "請輸入數(shù)組

105、大寫str2[]" << endl;</p><p>  char str2[100];</p><p>  cin >> str2;</p><p>  x.Mystrlwr(str2);</p><p>  } /*strlw

106、r模塊*/</p><p>  case '8':exit(0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  }while(w1==1); getchar();</p><p><b>  }

107、</b></p><p>  int main()</p><p><b>  {</b></p><p>  menu(); /*進入菜單*/</p><p><b>  return 0;</b></p><p><b>  }///:

108、~</b></p><p><b>  程序運行結(jié)果</b></p><p>  Mstrcpy運行結(jié)果</p><p>  Mstrncpy運行結(jié)果</p><p>  Mstrcat運行結(jié)果</p><p>  Mstrncat運行結(jié)果</p><p>  

109、Mstrlen運行結(jié)果</p><p>  Mystrupr運行結(jié)果</p><p>  Mystrlwr運行結(jié)果</p><p>  遇到的困難及解決方法</p><p>  萬事開頭難,其實最先開始時我不知如何下手來實現(xiàn)這些功能。只能從最簡單的strcpy開始。但是當寫完strcpy后我突然發(fā)現(xiàn)也不是很難,于是慢慢寫下來終于寫好了。期間遇

110、到的問題有一個是如何來控制strcat的起始位置,同學(xué)告訴我說可以利用strlen來進行先讀取數(shù)組長度再處理。我經(jīng)過思考解決了這個問題。</p><p>  8.總結(jié)心得及良好建議</p><p>  寫程序本身即是一件令人枯燥乏味的事情,重要的是要有堅持的信心。最令人興奮喜悅的卻莫過于經(jīng)過N+1次的修改調(diào)試之后終于成功的快樂。很多程序都是相通的,很多語言也是有共同點的,但又是不同的。我在

111、編寫程序的過程中用到了大量的C語言知識,菜單函數(shù)也是我對C語言課程設(shè)計的直接修改后用的。而要實現(xiàn)題目的要求還要對課本進行詳細的解讀(例如類具體是如何對各個函數(shù)進行控制的)。在分裝過程中我直接是對課本類似例題的修改而來。經(jīng)過此次練習(xí)不僅讓我對信知識有了了解也讓我經(jīng)以前模糊的概念逐漸弄清楚。</p><p><b>  9.致謝</b></p><p>  首先感謝xx老

溫馨提示

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

評論

0/150

提交評論