串基本操作的演示_第1頁(yè)
已閱讀1頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)</p><p>  題 目 串基本操作的演示 </p><p>  學(xué) 院 計(jì)算機(jī)學(xué)院 </p><p>  專 業(yè) 網(wǎng)絡(luò)工程 </p><p>  一.、課程設(shè)計(jì)任務(wù)要求</p><p

2、>  在教科書4.2.2節(jié)用堆分配存儲(chǔ)表示實(shí)現(xiàn)HString串的最小操作子集的基礎(chǔ)上,實(shí)現(xiàn)串抽象數(shù)據(jù)類型的其余基本操作(不使用C語(yǔ)言本身提供的串函數(shù))。參數(shù)合法性檢查必須嚴(yán)格。 說(shuō)明:(在格式中,Φ表示0個(gè)、1個(gè)或多個(gè)空格所組成的串。〈串標(biāo)識(shí)〉表示一個(gè)內(nèi)部名或一個(gè)串文字。前者是一個(gè)串的唯一標(biāo)識(shí),是一種內(nèi)部形式的(而不是字符形式的)標(biāo)識(shí)符。后者是兩端由單引號(hào)括起來(lái)的僅可打印字符組成的序列。串內(nèi)每?jī)蓚€(gè)連續(xù)的單引號(hào)表示一個(gè)單引號(hào)符。)

3、</p><p>  利用上述基本操作函數(shù)構(gòu)造以下系統(tǒng):它是一個(gè)命令解釋程序,循環(huán)往復(fù)地處理用戶鍵入的每一條命令,直至終止程序的命令為止。命令定義如下:   </p><p> ?。?)賦值。格式:AΦ〈串標(biāo)識(shí)〉Φ〈回車〉 用〈串標(biāo)識(shí)〉所表示的值建立新</p><p>  串,并顯示新串的內(nèi)部名和串值。如:A′Hi!′</p><p> ?。?/p>

4、2) 判相等。 格式:EΦ〈串標(biāo)識(shí)1〉Φ〈串標(biāo)識(shí)2〉Φ〈回車〉 </p><p>  若兩串相等,則顯示“EQUAL”,否則顯示“UNEQUAL”。 </p><p>  (3) 聯(lián)接。 格式:CΦ〈串標(biāo)識(shí)1〉Φ〈串標(biāo)識(shí)2〉Φ〈回車〉 </p><p>  將兩串聯(lián)接產(chǎn)生結(jié)果串,它的內(nèi)部名和串值都顯示出來(lái)。 </p><p> ?。?) 求長(zhǎng)

5、度 格式:LΦ〈串標(biāo)識(shí)〉Φ〈回車〉 顯示串的長(zhǎng)度。 </p><p> ?。?) 求子串 格式:SΦ〈串標(biāo)識(shí)〉Φ+〈數(shù)1〉Φ+〈數(shù)2〉Φ〈回車〉 </p><p>  如果參數(shù)合法,則顯示子串的內(nèi)部名和串值?!磾?shù)〉不帶正負(fù)號(hào)。 </p><p> ?。?)子串定位。 格式:IΦ〈串標(biāo)識(shí)1〉Φ〈串標(biāo)識(shí)2〉Φ〈回車〉 </p><p>  顯示第

6、二個(gè)串在第一個(gè)串中首次出現(xiàn)時(shí)的位置。 </p><p> ?。?)串替換 格式:RΦ〈串標(biāo)識(shí)1〉Φ〈串標(biāo)識(shí)2〉Φ〈串標(biāo)識(shí)2〉Φ〈回車〉 </p><p>  將第一個(gè)串中出現(xiàn)所有出現(xiàn)的第二個(gè)串用第三個(gè)串替換,顯示結(jié)果串的內(nèi)部名和 串值,原串不變。 </p><p>  (8)顯示。格式PΦ〈回車>顯示所有在系統(tǒng)中被保持的串的內(nèi)部名和串值的對(duì)照表</p&

7、gt;<p>  (9)刪除。格式DΦ〈內(nèi)部名>Φ〈回車>刪除該內(nèi)部名對(duì)應(yīng)的串,即賦值的逆操作。</p><p> ?。?)退出 格式:QΦ〈回車〉 結(jié)束程序的運(yùn)行。</p><p>  二、已完成的項(xiàng)目及完成程度 </p><p> ?。?) 賦值。 StrAssign(SqString &s,char cstr[])<

8、/p><p> ?。?) 判相等。 StrEqual(SqString s,SqString t)</p><p>  (3) 聯(lián)接。 Concat(SqString s,SqString t)</p><p> ?。?) 求長(zhǎng)度 。StrLength(SqString s)</p><p> ?。?) 求子串 。SubStr(SqString

9、 s,int i,int j)</p><p>  (6)子串定位。 Index(linkstring *s,linkstring *t)</p><p> ?。?)串替換 。Replace(linkstring *&s,linkstring *t,linkstring *r) </p><p> ?。?)顯示。 Dispstr(linkstri

10、ng *s)</p><p> ?。?)刪除。 DelStr(SqString s,int i,int j)</p><p> ?。?)退出 。Quit()</p><p>  完成了項(xiàng)目要求的大部分所有操作。</p><p>  三、理論依據(jù)、用到的數(shù)據(jù)結(jié)構(gòu),及舉例</p><p><b>  定義串的基本

11、主結(jié)構(gòu)</b></p><p>  ADT String{</p><p>  數(shù)據(jù)對(duì)象:D={ai| ai∈charcaterset,i=1,2,…,n,n>=0}</p><p>  數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D, i=1,2,…,n}</p><p>  基本操作:

12、 </p><p>  StrCompare(HString S,HString T)</p><p>  初始條件:S和T是已存在的Hstring類型。</p><p>  操作結(jié)果:比較其值,顯示結(jié)果“UNEQUAL”或“EQUAL”。</p><p>  StrLength(HString S)</p><p>

13、  初始條件:S是已存在的Hstring類型。</p><p>  操作結(jié)果:返回該串的長(zhǎng)度。</p><p>  Concat(HString S1,HString S2)</p><p>  初始條件:S1和S2是已存在的Hstring類型。</p><p>  操作結(jié)果:由S1和S2聯(lián)接成新串。</p><p>

14、  Index(HString S,HString t)</p><p>  初始條件:S和T是已存在的Hstring類型。</p><p>  操作結(jié)果:顯示第二個(gè)串在第一個(gè)串中首次出現(xiàn)的起始位置。</p><p>  Replace(HString M, HString t, HString v)</p><p>  初始條件:M、t和v

15、是已存在的Hstring類型。</p><p>  操作結(jié)果:將第一個(gè)串中所有出現(xiàn)的第二個(gè)串用第三個(gè)串替換,顯示結(jié)果串的內(nèi)部名和串值,原串不變。</p><p>  SubString(HString S,int pos,int len)</p><p>  初始條件:S是已存在的Hstring類型。</p><p>  操作結(jié)果:如果參數(shù)合

16、法,則顯示子串的內(nèi)部名和串值 。</p><p>  Strprint(HString S)</p><p>  初始條件:S是已存在的Hstring類型。</p><p>  操作結(jié)果:顯示串S的內(nèi)部名和串值 。</p><p>  getin(int n)</p><p>  初始條件:處理命令串S1,</p

17、><p>  操作結(jié)果:把串值存入串頭表中</p><p>  Insert(int n)</p><p>  初始條件:要給指定的串賦值,n為指定的串的內(nèi)部名</p><p>  操作結(jié)果:為指定內(nèi)部名的串賦值</p><p><b>  show()</b></p><p>

18、;  初始條件:要求查看輸入格式</p><p>  操作結(jié)果:輸出各種命令的輸入格式</p><p>  }ADT String</p><p>  typedef struct</p><p><b>  {</b></p><p>  char *ch; //若是非空串,則按串長(zhǎng)

19、分配存儲(chǔ)區(qū),否則ch為NULL</p><p>  int length; //串長(zhǎng)度</p><p><b>  }HString;</b></p><p><b>  主要算法流程圖</b></p><p>  E C L S R

20、 D Q </p><p><b>  主要代碼</b></p><p><b>  引用的頭文件:</b></p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p>

21、<p>  #include <string.h></p><p><b>  使用的結(jié)構(gòu)體:</b></p><p>  typedef struct {</p><p>  char data[MaxSize];//存放串字符</p><p>  int len; //串長(zhǎng)

22、</p><p>  }SqString;</p><p>  關(guān)鍵函數(shù)功能實(shí)現(xiàn): </p><p>  void Scanf(char cstrr[]){ // 輸入字符串</p><p>  cstrr[100];</p><p>  printf("Enter a string:\n");//

23、提示用戶輸入字符串</p><p><b>  int j=0;</b></p><p>  while((cstrr[j]=getchar())!='\n')</p><p><b>  j++;</b></p><p>  cstrr[j]='\0';</p

24、><p><b>  }</b></p><p><b>  //串賦值</b></p><p>  void StrAssign(SqString &s,char cstr[])</p><p><b>  { </b></p><p>  S

25、canf(cstr);</p><p><b>  int i;</b></p><p>  for(i=0;cstr[i]!='\0';i++)</p><p>  s.data[i]=cstr[i];</p><p><b>  s.len=i;</b></p>&

26、lt;p><b>  }</b></p><p><b>  //判斷串是否相等</b></p><p>  int StrEqual(SqString s,SqString t)</p><p><b>  {</b></p><p>  int same=1,i;&l

27、t;/p><p>  if (s.len!=t.len) //長(zhǎng)度不相等時(shí)返回</p><p><b>  same=0;</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  fo

28、r (i=0;i<s.len;i++)</p><p>  if (s.data[i]!=t.data[i])//有一個(gè)對(duì)應(yīng)字符不相同時(shí)返回</p><p><b>  same=0;</b></p><p><b>  }</b></p><p>  return same;</p&

29、gt;<p><b>  }</b></p><p>  //將串t復(fù)制給串s</p><p>  void StrCopy(SqString &s,SqString t)</p><p><b>  {</b></p><p><b>  int i;</b&

30、gt;</p><p>  for(i=0;i<t.len;i++)</p><p>  s.data[i]=t.data[i];</p><p>  s.len=t.len;</p><p><b>  }</b></p><p><b>  //求串長(zhǎng)</b><

31、;/p><p>  int StrLength(SqString s)</p><p><b>  {</b></p><p>  return s.len;</p><p><b>  }</b></p><p><b>  //求子串</b></p

32、><p>  SqString SubStr(SqString s,int i,int j)</p><p><b>  {</b></p><p>  SqString str;</p><p><b>  int k;</b></p><p>  str.len=0;<

33、/p><p>  if(i<=0||i>s.len||j<0||i+j-1>s.len)</p><p>  return str; //參數(shù)不正確時(shí)返回空串</p><p>  for(k=i-1;k<i+j-1;k++) //將s.data[i..i+j]復(fù)制到str<

34、/p><p>  str.data[k-i+1]=s.data[k];</p><p>  str.len=j;</p><p>  return str;</p><p><b>  }</b></p><p>  //串的連接:返回由兩個(gè)串連接在一起的新串</p><p>

35、  SqString Concat(SqString s,SqString t)</p><p><b>  {</b></p><p>  SqString str;</p><p><b>  int i;</b></p><p>  str.len=s.len+t.len;</p>

36、<p>  for(i=0;i<s.len;i++) //將s復(fù)制到str</p><p>  str.data[i]=s.data[i];</p><p>  for(i=0;i<t.len;i++) //將t復(fù)制到str</p><p>  str.data[s.len+i]=t.data[i];</p>

37、<p>  return str;</p><p><b>  }</b></p><p><b>  //串的替換</b></p><p>  SqString RepStr(SqString s,int i,int j,SqString t)</p><p><b>  

38、{</b></p><p><b>  int k;</b></p><p>  SqString str;</p><p>  str.len=0;</p><p>  if(i<=0||i>s.len||i+j-1>s.len) //參數(shù)不正確時(shí)返回空串</p>&l

39、t;p>  return str;</p><p>  for(k=0;k<i-1;k++) //將s.data[0..i-2]復(fù)制到str</p><p>  str.data[k]=s.data[k];</p><p>  for(k=0;k<t.len;k++) //將t復(fù)制到str<

40、/p><p>  str.data[i+k-1]=t.data[k];</p><p>  for(k=i+j-1;k<s.len;k++) //將s.data[i+j-1..s.len-1]復(fù)制到str</p><p>  str.data[t.len+k-j]=s.data[k];</p><p>  str.len=s

41、.len-j+t.len;</p><p>  return str;</p><p><b>  }</b></p><p><b>  //串的刪除</b></p><p>  SqString DelStr(SqString s,int i,int j)</p><p>

42、;<b>  {</b></p><p><b>  int k;</b></p><p>  SqString str;</p><p>  str.len=0;</p><p>  if (i<=0 || i>s.len|| i+j>s.len+1) //參數(shù)不正確時(shí)返回空

43、串</p><p><b>  {</b></p><p>  printf("參數(shù)不正確\n");</p><p>  return str;</p><p><b>  }</b></p><p>  for (k=0;k<i-1;k++)

44、//將s.data[0]~s.data[i-2]復(fù)制到str</p><p>  str.data[k]=s.data[k];</p><p>  for (k=i+j-1;k<s.len;k++)//將s.data[i+j-1]~data[s.length-1]復(fù)制到str</p><p>  str.data[k-j]=s.data[k];</p

45、><p>  str.len=s.len-j;</p><p>  return str;</p><p><b>  }</b></p><p><b>  //串比較</b></p><p>  int Strcmp(SqString s,SqString t)</p&

46、gt;<p><b>  {</b></p><p>  int i,comlen;</p><p>  if(s.len<t.len)</p><p>  comlen=s.len; //求s和t的共同長(zhǎng)度</p><p><b>  else</b></

47、p><p>  comlen=t.len;</p><p>  for(i=0;i<comlen;i++){ //在共同長(zhǎng)度內(nèi)逐個(gè)字符比較</p><p>  if(s.data[i]<t.data[i])</p><p>  return -1;</p><p>  else if(s.data[i]>

48、;t.data[i])</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  if(s.len==t.len) </p><p>  return 0; //s==t</p><p>

49、;  else if(s.len<t.len) </p><p>  return -1; //s<t</p><p>  else </p><p>  return 1; //s>t</p><p><b>  }</b></p>

50、<p><b>  //輸出串</b></p><p>  void DispStr(SqString str)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  if (str.len>0)<

51、;/p><p><b>  {</b></p><p>  for (i=0;i<str.len;i++)</p><p>  printf("%c",str.data[i]);</p><p>  printf("\n");</p><p><b&

52、gt;  }</b></p><p><b>  }</b></p><p><b>  // 菜單函數(shù)</b></p><p>  void menus(){</p><p>  int i,j,m,x,y;</p><p><b>  char n;

53、</b></p><p>  printf("***************************************************\n");</p><p>  printf("******** A 賦值 E 判斷相等 C 聯(lián)接********\n");</p><p>  p

54、rintf("******** L 求長(zhǎng)度 S 求子串 I 子串定位****\n");</p><p>  printf("******** R 串替換 P 顯示 D 刪除 *******\n");</p><p>  printf("******** Q 退出

55、 ******\n");</p><p>  scanf("%c",&n);</p><p>  getchar();</p><p>  switch(n)</p><p><b>  {</b></p><p><b&g

56、t;  case 'A':</b></p><p><b>  case 'a':</b></p><p>  printf("A 請(qǐng)輸入需要賦值的串 \n");</p><p>  StrAssign(str1,cstr1);</p><p>  prin

57、tf("輸出str1=");</p><p>  DispStr(str1);</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b>  case 'E':</b>&l

58、t;/p><p><b>  case 'e':</b></p><p>  printf("E 判斷串str1和str2是否相等:\n");</p><p>  StrAssign(str1,cstr1);</p><p>  StrAssign(str2,cstr2);</p&g

59、t;<p>  m=StrEqual(str1,str2);</p><p><b>  if(m==1)</b></p><p>  printf("EQUAL\n");</p><p><b>  else</b></p><p>  printf("

60、NUEQUAL\n");</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b>  case 'C':</b></p><p><b>  case 'c

61、9;:</b></p><p>  printf("輸入要連接的兩個(gè)串:\n");</p><p>  printf("將串str1和串str2連接起來(lái)形成串s1:\n");</p><p>  StrAssign(str1,cstr1);</p><p>  StrAssign(str2,

62、cstr2);</p><p>  s1=Concat(str1,str2);</p><p>  DispStr(s1);</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b>  case

63、 'L':</b></p><p><b>  case 'l':</b></p><p>  printf("輸入要求長(zhǎng)度的串:\n");</p><p>  StrAssign(str1,cstr1);</p><p>  printf("st

64、r1的長(zhǎng)度為:%d\n",StrLength(str1));</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b>  case 'S':</b></p><p>  case

65、's':</p><p>  printf("提取串str1的第a個(gè)字符開(kāi)始的b個(gè)字符而產(chǎn)生串s2\n");</p><p>  StrAssign(str1,cstr1);</p><p><b>  int a,b;</b></p><p>  scanf("%d %d

66、",&a,&b);</p><p>  s2=SubStr(str1,a,b);</p><p>  DispStr(s2);</p><p><b>  menus();</b></p><p><b>  break;</b></p><p>&

67、lt;b>  case 'R':</b></p><p><b>  case 'r':</b></p><p>  printf("在串str1中,將第p個(gè)字符開(kāi)始的q個(gè)字符構(gòu)成的子串用str2替換,形成s3:\n");</p><p>  StrAssign(str1,c

68、str1);</p><p><b>  int p,q;</b></p><p>  scanf("%d %d",&p,&q);</p><p>  StrAssign(str2,cstr2);</p><p>  s3=RepStr(str1,p,q,str2);</p>

69、;<p>  DispStr(s3);</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b>  case 'D':</b></p><p><b>  case

70、'd':</b></p><p>  printf("從串str1中刪去第i個(gè)字符開(kāi)始的長(zhǎng)度為j的子串,形成串s3:\n");</p><p>  StrAssign(str1,cstr1);</p><p><b>  int x,y;</b></p><p>  sca

71、nf("%d %d",&x,&y);</p><p>  s3=DelStr(str1,x,y);</p><p>  DispStr(s3);</p><p><b>  menus();</b></p><p><b>  break;</b></p&g

72、t;<p><b>  case 'Q':</b></p><p><b>  case 'q':</b></p><p><b>  break;</b></p><p><b>  }</b></p><p&g

73、t;<b>  }</b></p><p>  void main() //主函數(shù)</p><p><b>  {</b></p><p><b>  menus();</b></p><p><b>  }</b></p><p&g

74、t;<b>  六、實(shí)驗(yàn)截圖</b></p><p><b>  1. 測(cè)試用例</b></p><p>  (1) A s = deng <回車> ,應(yīng)顯示s = deng ; </p><p>  (2) E “ “ <回車> ,應(yīng)顯示 “EQUAL”;</p><p

75、>  (3) E ‘a(chǎn)bc’ ‘a(chǎn)bcd’ <回車>,應(yīng)顯示“UNEQUAL”;</p><p>  (4) I ‘a(chǎn)’ “ <回車>,應(yīng)報(bào)告:參數(shù)非法; </p><p>  (5)R ‘ dengbolun’ ‘2 4 ’ ‘ huizhi’<回車>,應(yīng)顯示 ‘ba’;</p><p>  (6) D ‘

76、dengbolun ’ ‘2 4’<回車>,應(yīng)顯示:dolun;</p><p>  (7)D ‘fdhagkjh’ ‘ 3 6 ’ <回車>,應(yīng)顯示:fdjh;</p><p> ?。?)C ‘deng’ ‘bolun’ <回車>,應(yīng)顯示:dengbolun; </p><p> ?。?)L ‘a(chǎn)bcdefg’<回車&

77、gt;,應(yīng)顯示:7;</p><p><b>  2. 程序截圖</b></p><p><b>  實(shí)驗(yàn)結(jié)果分析</b></p><p>  經(jīng)檢驗(yàn),測(cè)試數(shù)據(jù)預(yù)期結(jié)果和測(cè)試得出結(jié)果一致。</p><p><b>  小結(jié)</b></p><p>  本

78、實(shí)驗(yàn)是在Microsoft Visual C++上實(shí)現(xiàn)的</p><p>  本次實(shí)驗(yàn)學(xué)到了很多知識(shí):</p><p>  1)熟悉串的定義和串的基本操作。</p><p>  2)掌握順序串的基本運(yùn)算。</p><p>  3)加深對(duì)串?dāng)?shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實(shí)際問(wèn)題的編程能力。</p><p>  4)運(yùn)用到了

79、串的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),對(duì)鏈表也有了進(jìn)一步提高。</p><p><b>  附錄:源代碼</b></p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #include <string.h></p&g

80、t;<p><b>  //定義順序串</b></p><p>  #define MaxSize 100</p><p>  typedef struct</p><p><b>  {</b></p><p>  char data[MaxSize];//存放串字符</p&g

81、t;<p>  int len; //串長(zhǎng)</p><p>  }SqString;</p><p>  void menus();</p><p>  void Scanf(char cstrr[]){</p><p>  cstrr[100];</p><p>  printf(&

82、quot;Enter a string:\n");//提示用戶輸入字符串</p><p><b>  int j=0;</b></p><p>  while((cstrr[j]=getchar())!='\n')</p><p><b>  j++;</b></p><p&g

83、t;  cstrr[j]='\0';</p><p><b>  }</b></p><p><b>  //串賦值</b></p><p>  void StrAssign(SqString &s,char cstr[])</p><p><b>  { &l

84、t;/b></p><p>  Scanf(cstr);</p><p><b>  int i;</b></p><p>  for(i=0;cstr[i]!='\0';i++)</p><p>  s.data[i]=cstr[i];</p><p><b> 

85、 s.len=i;</b></p><p><b>  }</b></p><p><b>  //判斷串是否相等</b></p><p>  int StrEqual(SqString s,SqString t)</p><p><b>  {</b></p

86、><p>  int same=1,i;</p><p>  if (s.len!=t.len) //長(zhǎng)度不相等時(shí)返回</p><p><b>  same=0;</b></p><p><b>  else </b></p><p><b>  {<

87、;/b></p><p>  for (i=0;i<s.len;i++)</p><p>  if (s.data[i]!=t.data[i])//有一個(gè)對(duì)應(yīng)字符不相同時(shí)返回</p><p><b>  same=0;</b></p><p><b>  }</b></p>

88、<p>  return same;</p><p><b>  }</b></p><p>  //將串t復(fù)制給串s</p><p>  void StrCopy(SqString &s,SqString t)</p><p><b>  {</b></p>&

89、lt;p><b>  int i;</b></p><p>  for(i=0;i<t.len;i++)</p><p>  s.data[i]=t.data[i];</p><p>  s.len=t.len;</p><p><b>  }</b></p><p&

90、gt;<b>  //求串長(zhǎng)</b></p><p>  int StrLength(SqString s)</p><p><b>  {</b></p><p>  return s.len;</p><p><b>  }</b></p><p>

91、<b>  //求子串</b></p><p>  SqString SubStr(SqString s,int i,int j)</p><p><b>  {</b></p><p>  SqString str;</p><p><b>  int k;</b></

92、p><p>  str.len=0;</p><p>  if(i<=0||i>s.len||j<0||i+j-1>s.len)</p><p>  return str; //參數(shù)不正確時(shí)返回空串</p><p>  for(k=i-1;k<i+j-1;k++)

93、 //將s.data[i..i+j]復(fù)制到str</p><p>  str.data[k-i+1]=s.data[k];</p><p>  str.len=j;</p><p>  return str;</p><p><b>  }</b></p><p>  //串的連接:返回由

94、兩個(gè)串連接在一起的新串</p><p>  SqString Concat(SqString s,SqString t)</p><p><b>  {</b></p><p>  SqString str;</p><p><b>  int i;</b></p><p>

95、  str.len=s.len+t.len;</p><p>  for(i=0;i<s.len;i++) //將s復(fù)制到str</p><p>  str.data[i]=s.data[i];</p><p>  for(i=0;i<t.len;i++) //將t復(fù)制到str</p><p>  str.da

96、ta[s.len+i]=t.data[i];</p><p>  return str;</p><p><b>  }</b></p><p><b>  //串的替換</b></p><p>  SqString RepStr(SqString s,int i,int j,SqString t)

97、</p><p><b>  {</b></p><p><b>  int k;</b></p><p>  SqString str;</p><p>  str.len=0;</p><p>  if(i<=0||i>s.len||i+j-1>s.le

98、n) //參數(shù)不正確時(shí)返回空串</p><p>  return str;</p><p>  for(k=0;k<i-1;k++) //將s.data[0..i-2]復(fù)制到str</p><p>  str.data[k]=s.data[k];</p><p>  for(k=0;k<t.len

99、;k++) //將t復(fù)制到str</p><p>  str.data[i+k-1]=t.data[k];</p><p>  for(k=i+j-1;k<s.len;k++) //將s.data[i+j-1..s.len-1]復(fù)制到str</p><p>  str.data[t.len+k-j]=s.data[k];

100、</p><p>  str.len=s.len-j+t.len;</p><p>  return str;</p><p><b>  }</b></p><p><b>  //串的刪除</b></p><p>  SqString DelStr(SqString s,

101、int i,int j)</p><p><b>  {</b></p><p><b>  int k;</b></p><p>  SqString str;</p><p>  str.len=0;</p><p>  if (i<=0 || i>s.len

102、|| i+j>s.len+1) //參數(shù)不正確時(shí)返回空串</p><p><b>  {</b></p><p>  printf("參數(shù)不正確\n");</p><p>  return str;</p><p><b>  }</b></p><

103、p>  for (k=0;k<i-1;k++)//將s.data[0]~s.data[i-2]復(fù)制到str</p><p>  str.data[k]=s.data[k];</p><p>  for (k=i+j-1;k<s.len;k++)//將s.data[i+j-1]~data[s.length-1]復(fù)制到str</p><p>

104、  str.data[k-j]=s.data[k];</p><p>  str.len=s.len-j;</p><p>  return str;</p><p><b>  }</b></p><p><b>  //串比較</b></p><p>  int Strc

105、mp(SqString s,SqString t)</p><p><b>  {</b></p><p>  int i,comlen;</p><p>  if(s.len<t.len)</p><p>  comlen=s.len; //求s和t的共同長(zhǎng)度</p><p&g

106、t;<b>  else</b></p><p>  comlen=t.len;</p><p>  for(i=0;i<comlen;i++){ //在共同長(zhǎng)度內(nèi)逐個(gè)字符比較</p><p>  if(s.data[i]<t.data[i])</p><p>  return -1;</p>

107、<p>  else if(s.data[i]>t.data[i])</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  if(s.len==t.len) </p><p>  return 0;

108、 //s==t</p><p>  else if(s.len<t.len) </p><p>  return -1; //s<t</p><p>  else </p><p>  return 1; //s>t</p><p>&

109、lt;b>  }</b></p><p><b>  //輸出串</b></p><p>  void DispStr(SqString str)</p><p><b>  {</b></p><p><b>  int i;</b></p>

110、<p>  if (str.len>0)</p><p><b>  {</b></p><p>  for (i=0;i<str.len;i++)</p><p>  printf("%c",str.data[i]);</p><p>  printf("\n&qu

111、ot;);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p><b>  menus();</b>&l

112、t;/p><p><b>  }</b></p><p>  char cstr1[80],cstr2[80];</p><p>  SqString str1,str2,s1,s2,s3;</p><p>  void menus(){</p><p>  int i,j,m,x,y;</p

113、><p><b>  char n;</b></p><p>  printf("***************************************************\n");</p><p>  printf("******** A 賦值 E 判斷相等 C 聯(lián)接********\

114、n");</p><p>  printf("******** L 求長(zhǎng)度 S 求子串 I 子串定位****\n");</p><p>  printf("******** R 串替換 P 顯示 D 刪除 *******\n");</p><p>  printf(&quo

115、t;******** Q 退出 ******\n");</p><p>  scanf("%c",&n);</p><p>  getchar();</p><p>  switch(n)</p><p><b>  {</

116、b></p><p><b>  case 'A':</b></p><p><b>  case 'a':</b></p><p>  printf("A 請(qǐng)輸入需要賦值的串 \n");</p><p>  StrAssign(str1,c

117、str1);</p><p>  printf("輸出str1=");</p><p>  DispStr(str1);</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b&g

118、t;  case 'E':</b></p><p><b>  case 'e':</b></p><p>  printf("E 判斷串str1和str2是否相等:\n");</p><p>  StrAssign(str1,cstr1);</p><p>

119、;  StrAssign(str2,cstr2);</p><p>  m=StrEqual(str1,str2);</p><p><b>  if(m==1)</b></p><p>  printf("EQUAL\n");</p><p><b>  else</b><

120、;/p><p>  printf("NUEQUAL\n");</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b>  case 'C':</b></p>&

121、lt;p><b>  case 'c':</b></p><p>  printf("輸入要連接的兩個(gè)串:\n");</p><p>  printf("將串str1和串str2連接起來(lái)形成串s1:\n");</p><p>  StrAssign(str1,cstr1);</

122、p><p>  StrAssign(str2,cstr2);</p><p>  s1=Concat(str1,str2);</p><p>  DispStr(s1);</p><p><b>  menus();</b></p><p><b>  break;</b><

123、;/p><p><b>  case 'L':</b></p><p><b>  case 'l':</b></p><p>  printf("輸入要求長(zhǎng)度的串:\n");</p><p>  StrAssign(str1,cstr1);</

124、p><p>  printf("str1的長(zhǎng)度為:%d\n",StrLength(str1));</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b>  case 'S':</

125、b></p><p>  case 's':</p><p>  printf("提取串str1的第a個(gè)字符開(kāi)始的b個(gè)字符而產(chǎn)生串s2\n");</p><p>  StrAssign(str1,cstr1);</p><p><b>  int a,b;</b></p&

126、gt;<p>  scanf("%d %d",&a,&b);</p><p>  s2=SubStr(str1,a,b);</p><p>  DispStr(s2);</p><p><b>  menus();</b></p><p><b>  break

127、;</b></p><p><b>  case 'R':</b></p><p><b>  case 'r':</b></p><p>  printf("在串str1中,將第p個(gè)字符開(kāi)始的q個(gè)字符構(gòu)成的子串用str2替換,形成s3:\n");</p

128、><p>  StrAssign(str1,cstr1);</p><p><b>  int p,q;</b></p><p>  scanf("%d %d",&p,&q);</p><p>  StrAssign(str2,cstr2);</p><p>  s

129、3=RepStr(str1,p,q,str2);</p><p>  DispStr(s3);</p><p><b>  menus();</b></p><p><b>  break;</b></p><p><b>  case 'D':</b><

130、/p><p><b>  case 'd':</b></p><p>  printf("從串str1中刪去第i個(gè)字符開(kāi)始的長(zhǎng)度為j的子串,形成串s3:\n");</p><p>  StrAssign(str1,cstr1);</p><p><b>  int x,y;<

131、;/b></p><p>  scanf("%d %d",&x,&y);</p><p>  s3=DelStr(str1,x,y);</p><p>  DispStr(s3);</p><p><b>  menus();</b></p><p>&l

132、t;b>  break;</b></p><p><b>  case 'Q':</b></p><p><b>  case 'q':</b></p><p><b>  break;</b></p><p><b>

溫馨提示

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