串基本操作的演示課程設(shè)計_第1頁
串基本操作的演示課程設(shè)計_第2頁
串基本操作的演示課程設(shè)計_第3頁
串基本操作的演示課程設(shè)計_第4頁
串基本操作的演示課程設(shè)計_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、11題 目 串基本操作的演示學(xué)院計算機學(xué)院專業(yè)網(wǎng)絡(luò)工程一 .、課程設(shè)計任務(wù)要求在教科書4.2.2 節(jié)用堆分配存儲表示實現(xiàn)HString 串的最小操作子集的基礎(chǔ)上,實現(xiàn)串抽象數(shù)據(jù)類型的其余基本操作(不使用C 語言本身提供的串函數(shù))。參數(shù)合法性檢查必須嚴格。說明: (在格式中, 表示 0 個、 1 個或多個空格所組成的串。串標識表示一個內(nèi)部名或一個串文字。前者是一個串的唯一標識,是一種內(nèi)部形式的(而不是字符形式的)標識符。后者是兩端由單引號括起來的僅可打印字符組成的序列。串內(nèi)每兩個連續(xù)的單引號表示一個單引號符。)利用上述基本操作函數(shù)構(gòu)造以下系統(tǒng):它是一個命令解釋程序,循環(huán)往復(fù)地處理用戶鍵入的每一條

2、命令,直至終止程序的命令為止。命令定義如下:( 1) 值。格式:A 串標識 回車用串標識所表示的值建立新串,并顯示新串的內(nèi)部名和串值。如:A Hi!( 2) 判相等。格式: E 串標識1 串標識2 回車若兩串相等,則顯示“EQUAL ”,否則顯示“UNEQUAL ”。( 3) 聯(lián)接。 格式:C 串標識1 串標識2 回車將兩串聯(lián)接產(chǎn)生結(jié)果串,它的內(nèi)部名和串值都顯示出來。( 4) 求長度 格式: L 串標識 回車顯示串的長度。( 5) 求子串 格式:S 串標識+數(shù)1 +數(shù)2 回車如果參數(shù)合法,則顯示子串的內(nèi)部名和串值。數(shù)不帶正負號。( 6) 串定位。格式: I 串標識1 串標識2 回車顯示第二個串

3、在第一個串中首次出現(xiàn)時的位置。( 7) 替換格式:R 串標識1 串標識2 串標識2 回車將第一個串中出現(xiàn)所有出現(xiàn)的第二個串用第三個串替換,顯示結(jié)果串的內(nèi)部名和串值,原串不變。( 8) 示。格式P 回車顯示所有在系統(tǒng)中被保持的串的內(nèi)部名和串值的對照表( 9) 除。格式D 內(nèi)部名 回車刪除該內(nèi)部名對應(yīng)的串,即賦值的逆操作。( 10) 格式:Q 回車結(jié)束程序的運行。二、已完成的項目及完成程度( 11) 賦值。StrAssign( SqString &s,char cstr)( 12) 判相等。StrEqual(SqString s,SqString t)( 13) 聯(lián)接。Concat(SqS

4、tring s,SqString t)( 14) 求長度。 StrLength(SqString s)( 15) 求子串。 SubStr(SqString s,int i,int j)( 6)子串定位。Index(linkstring *s,linkstring *t)( 7)串替換。 Replace(linkstring *&s,linkstring *t,linkstring *r)( 8)顯示。Dispstr(linkstring *s)( 9)刪除。DelStr(SqString s,int i,int j)( 0)退出。 Quit()完成了項目要求的大部分所有操作。三、理論依

5、據(jù)、用到的數(shù)據(jù)結(jié)構(gòu),及舉例定義串的基本主結(jié)構(gòu)ADT String數(shù)據(jù)對象:D=ai| ai charcaterset,i=1,2, ,n,n>=0數(shù)據(jù)關(guān)系:R1=<ai-1,ai>|ai-1,ai D, i=1,2, ,n基本操作:StrCompare(HString S,HString T)初始條件:S 和 T 是已存在的Hstring 類型。操作結(jié)果:比較其值,顯示結(jié)果“UNEQUA” L 或“EQUA”L 。StrLength(HString S)初始條件:S 是已存在的Hstring 類型。操作結(jié)果:返回該串的長度。Concat(HString S1,HString

6、S2)初始條件:S1 和 S2是已存在的Hstring 類型。操作結(jié)果:由S1 和 S2聯(lián)接成新串。Index(HString S,HString t)初始條件:S 和 T 是已存在的Hstring 類型。操作結(jié)果:顯示第二個串在第一個串中首次出現(xiàn)的起始位置。Replace(HString M, HString t, HString v)初始條件:M 、 t 和 v 是已存在的Hstring 類型。操作結(jié)果:將第一個串中所有出現(xiàn)的第二個串用第三個串替換,顯示結(jié)果串的內(nèi)部名和串值,原串不變。SubString(HString S,int pos,int len)初始條件:S 是已存在的Hstri

7、ng 類型。操作結(jié)果:如果參數(shù)合法,則顯示子串的內(nèi)部名和串值。Strprint(HString S)初始條件:S 是已存在的Hstring 類型。操作結(jié)果:顯示串S 的內(nèi)部名和串值。getin(int n)初始條件:處理命令串S1,操作結(jié)果:把串值存入串頭表中Insert(int n)初始條件:要給指定的串賦值,n 為指定的串的內(nèi)部名操作結(jié)果:為指定內(nèi)部名的串賦值show()初始條件:要求查看輸入格式操作結(jié)果:輸出各種命令的輸入格式ADT Stringtypedef structchar *ch;/若是非空串,則按串長分配存儲區(qū),否則ch 為 NULLint length;/串長度HStrin

8、g;四、主要算法流程圖五、主要代碼引用的頭文件:#include <stdio.h>#include <stdlib.h>#include <string.h>使用的結(jié)構(gòu)體:typedef struct char dataMaxSize;/存放串字符int len;/串長SqString;關(guān)鍵函數(shù)功能實現(xiàn):void Scanf(char cstrr) / 輸入字符串cstrr100;printf("Enter a string:n");/ 提示用戶輸入字符串 int j=0;while(cstrrj=getchar()!='n&#

9、39;) j+;cstrrj='0'/串賦值void StrAssign(SqString &s,char cstr)Scanf(cstr);int i;for(i=0;cstri!='0'i+) s.datai=cstri;s.len=i;/判斷串是否相等int StrEqual(SqString s,SqString t)int same=1,i;if (s.len!=t.len)/長度不相等時返回same=0; elsefor (i=0;i<s.len;i+)if (s.datai!=t.datai) /有一個對應(yīng)字符不相同時返回 same=

10、0;return same;/將串t 復(fù)制給串svoid StrCopy(SqString &s,SqString t)int i;for(i=0;i<t.len;i+) s.datai=t.datai;s.len=t.len;/求串長int StrLength(SqString s)return s.len;/求子串SqString SubStr(SqString s,int i,int j)SqString str;int k;str.len=0;if(i<=0|i>s.len|j<0|i+j-1>s.len)return str;/參數(shù)不正確時返回空

11、串for(k=i-1;k<i+j-1;k+)/將s.datai.i+j復(fù)制到strstr.datak-i+1=s.datak;str.len=j;return str;/串的連接:返回由兩個串連接在一起的新串SqString Concat(SqString s,SqString t)SqString str;int i;str.len=s.len+t.len;for(i=0;i<s.len;i+)/將s復(fù)制到strstr.datai=s.datai;for(i=0;i<t.len;i+)/將t復(fù)制到strstr.datas.len+i=t.datai;return str;/

12、串的替換SqString RepStr(SqString s,int i,int j,SqString t)int k;SqString str;str.len=0;/參數(shù)不正確時返回空串/將s.data0.i-2復(fù)制到str/將t 復(fù)制到 str/將 s.datai+j-1.s.len-1復(fù)制到strif(i<=0|i>s.len|i+j-1>s.len) return str;for(k=0;k<i-1;k+) str.datak=s.datak;for(k=0;k<t.len;k+)str.datai+k-1=t.datak;for(k=i+j-1;k<

13、;s.len;k+)str.datat.len+k-j=s.datak;str.len=s.len-j+t.len;return str;/串的刪除SqString DelStr(SqString s,int i,int j) int k;SqString str;str.len=0;if (i<=0 | i>s.len| i+j>s.len+1) /參數(shù)不正確時返回空串printf(" 參數(shù)不正確n");return str;for (k=0;k<i-1;k+)/將s.data0 s.datai-2復(fù)制到strstr.datak=s.datak;f

14、or (k=i+j-1;k<s.len;k+)/將s.datai+j-1 datas.length-1復(fù)制到strstr.datak-j=s.datak;str.len=s.len-j;return str;/串比較int Strcmp(SqString s,SqString t) int i,comlen;/求s和 t 的共同長度if(s.len<t.len)comlen=s.len;elsecomlen=t.len;for(i=0;i<comlen;i+)/在共同長度內(nèi)逐個字符比較if(s.datai<t.datai)return -1;else if(s.data

15、i>t.datai) return 1;if(s.len=t.len)return 0;else if(s.len<t.len)return -1;elsereturn 1;/s=t/s<t/s>t/輸出串void DispStr(SqString str) int i;if (str.len>0)for (i=0;i<str.len;i+)printf("%c",str.datai);printf("n");/菜單函數(shù)void menus()int i,j,m,x,y;char n;printf("*n&q

16、uot;);printf("*A 賦值E 判斷相等C 聯(lián)接 *n");printf("*L 求長度S 求子串I 子串定位*n");printf("*R 串替換P 顯示D 刪除*n");printf("*Q退出*n");scanf("%c",&n);getchar();switch(n)case 'A':case 'a':printf("A 請輸入需要賦值的串n");StrAssign(str1,cstr1);printf("

17、輸出 str1=");DispStr(str1);menus();break;case 'E':case 'e':printf("E 判斷串 str1 和 str2是否相等:n");StrAssign(str1,cstr1);StrAssign(str2,cstr2);m=StrEqual(str1,str2);if(m=1)printf("EQUALn");elseprintf("NUEQUALn");menus();break;case 'C':case 'c

18、9;:printf(" 輸入要連接的兩個串:n");printf(" 將串 str1 和串 str2連接起來形成串s1: n");StrAssign(str1,cstr1);StrAssign(str2,cstr2);s1=Concat(str1,str2);DispStr(s1);menus();break;case 'L':case 'l':printf(" 輸入要求長度的串:n");StrAssign(str1,cstr1);printf("str1 的長度為:%dn",Str

19、Length(str1);menus();break;case 'S':case 's':printf(" 提取串 str1 的第a個字符開始的b 個字符而產(chǎn)生串s2n");StrAssign(str1,cstr1);int a,b;scanf("%d %d",&a,&b);s2=SubStr(str1,a,b);DispStr(s2);menus();break;case 'R':case 'r':printf(" 在串 str1 中,將第p 個字符開始的q 個字

20、符構(gòu)成的子串用str2替換 ,形成s3: n");StrAssign(str1,cstr1);int p,q;scanf("%d %d",&p,&q);StrAssign(str2,cstr2);s3=RepStr(str1,p,q,str2);DispStr(s3);menus();break;case 'D':case 'd':printf(" 從串 str1 中刪去第i 個字符開始的長度為j 的子串, 形成串 s3:n");StrAssign(str1,cstr1);int x,y;scan

21、f("%d %d",&x,&y);s3=DelStr(str1,x,y);DispStr(s3);menus();break;case 'Q':case 'q':break;void main() /主函數(shù) menus();六、實驗截圖1. 測試用例(1) A s = deng 回車 ,應(yīng)顯示s = deng ;(2) E“ 回車,應(yīng)顯示“ EQUAL ”;(3) E , abc?,abcd? 回車,應(yīng)顯示“UNEQUAL ”;(4) I,a?“ 回車,應(yīng)報告:參數(shù)非法;(5) R , dengbolun? ,2 4 ?, h

22、uizhi?回車,應(yīng)顯示, ba?;(6) D , dengbolun ? ,2 4?回車,應(yīng)顯示:dolun;(7) 7) D ,fdhagkjh?, 3 6 ? 回車,應(yīng)顯示:fdjh;(8) 8) C ,deng? ,bolun? 回車,應(yīng)顯示:dengbolun;(9) 9) L ,abcdefg?回車,應(yīng)顯示:7;2. 程序截圖XMXXXXXMXXXXXXXXX MX*X*X XMXMXXXE劉斷裙等 屣S求壬串切P顯不Q退出第除聯(lián)子刪定位*M*M*M*XMMXMMg判斷串stK和sS2是否相等:Enter a string:abc'Enter a string:abed&#

23、39;MUEQUAL從串stK中刪去第i個字符開始的長度為j的子串,形成串S3: Enter a string:fdhagkjh3 6fdIXXXXXXX等HHP 術(shù)Uli 斷子示顯E s p出退富除 聯(lián)子刪穎女要連拼電兩個集:一一存串st£和串sti2連接起來形成串si nter a string:longnter a string:olunlengbo lunMXXXXXXMXXXXXXXXA «<E刻斷相等C聯(lián)接L沃長度S求壬R串替換P顯小Q退出I子串定位MMMMD 刪除 xxxxxxx從串stK中刪去第i個字符開始的長度為j的子串,形成串s3 : Enter

24、a string: dengbolun 2 4o lun3. 實驗結(jié)果分析經(jīng)檢驗,測試數(shù)據(jù)預(yù)期結(jié)果和測試得出結(jié)果一致。Microsoft Visual C+ 上實現(xiàn)的1)熟悉串的定義和串的基本操作。2)掌握順序串的基本運算。3)加深對串數(shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實際問題的編程能力。4)運用到了串的鏈式存儲結(jié)構(gòu),對鏈表也有了進一步提高。附錄:源代碼#include <stdio.h>#include <stdlib.h>#include <string.h>/定義順序串#define MaxSize 100typedef structchar dataMax

25、Size;/ 存放串字符int len;/串長SqString;void menus();void Scanf(char cstrr)cstrr100;printf("Enter a string:n");/ 提示用戶輸入字符串int j=0;while(cstrrj=getchar()!='n') j+;cstrrj='0'/串賦值void StrAssign(SqString &s,char cstr)Scanf(cstr);int i;for(i=0;cstri!='0'i+) s.datai=cstri;s.l

26、en=i;/判斷串是否相等int StrEqual(SqString s,SqString t)int same=1,i;if (s.len!=t.len)/長度不相等時返回same=0;elsefor (i=0;i<s.len;i+)if (s.datai!=t.datai)/有一個對應(yīng)字符不相同時返回 same=0;return same;/將串 t 復(fù)制給串svoid StrCopy(SqString &s,SqString t)int i;for(i=0;i<t.len;i+)s.datai=t.datai;s.len=t.len;/求串長int StrLength

27、(SqString s)return s.len;/求子串SqString SubStr(SqString s,int i,int j)SqString str;int k;str.len=0;if(i<=0|i>s.len|j<0|i+j-1>s.len)return str;/參數(shù)不正確時返回空串for(k=i-1;k<i+j-1;k+)/將s.datai.i+j 復(fù)制到 strstr.datak-i+1=s.datak;str.len=j;return str;/串的連接:返回由兩個串連接在一起的新串SqString Concat(SqString s,Sq

28、String t)SqString str;int i;str.len=s.len+t.len;for(i=0;i<s.len;i+)/將s復(fù)制到 strstr.datai=s.datai;for(i=0;i<t.len;i+)/將t 復(fù)制到 strstr.datas.len+i=t.datai;return str;/串的替換SqString RepStr(SqString s,int i,int j,SqString t)int k;SqString str;str.len=0;if(i<=0|i>s.len|i+j-1>s.len) return str;f

29、or(k=0;k<i-1;k+)str.datak=s.datak;for(k=0;k<t.len;k+)str.datai+k-1=t.datak;for(k=i+j-1;k<s.len;k+)str.datat.len+k-j=s.datak;str.len=s.len-j+t.len;return str;/參數(shù)不正確時返回空串/將s.data0.i-2復(fù)制到str/將 t 復(fù)制到 str/將s.datai+j-1.s.len-1 復(fù)制到 str/參數(shù)不正確時返回空串/將s.data0 s.datai-2復(fù)制到 str/將s.datai+j-1 datas.length

30、-1 復(fù)制到 str/串的刪除SqString DelStr(SqString s,int i,int j) int k;SqString str;str.len=0;if (i<=0 | i>s.len| i+j>s.len+1)printf(" 參數(shù)不正確n");return str;for (k=0;k<i-1;k+)str.datak=s.datak;for (k=i+j-1;k<s.len;k+)str.datak-j=s.datak;str.len=s.len-j;return str;/串比較int Strcmp(SqString

31、 s,SqString t)int i,comlen;if(s.len<t.len)comlen=s.len;/求s 和 t 的共同長度elsecomlen=t.len;for(i=0;i<comlen;i+)/在共同長度內(nèi)逐個字符比較if(s.datai<t.datai)return -1;else if(s.datai>t.datai)return 1;if(s.len=t.len)return 0;/s=telse if(s.len<t.len)return -1;/s<telsereturn 1;/s>t/輸出串void DispStr(SqS

32、tring str)int i;if (str.len>0)for (i=0;i<str.len;i+) printf("%c",str.datai);printf("n");void main()menus();char cstr180,cstr280;SqString str1,str2,s1,s2,s3; void menus()int i,j,m,x,y;char n;printf("*A賦值E 判斷相等C聯(lián)接 *n");printf("*L求長度S 求子串I子串定位*n");printf(&q

33、uot;*R串替換P 顯示D刪除*n");printf("*Q退出*n");printf(*n");scanf("%c",&n);getchar();switch(n)case 'A':case 'a':printf("A 請輸入需要賦值的串n");StrAssign(str1,cstr1);printf(" 輸出 str1=");DispStr(str1);menus();break;case 'E':case 'e':printf("E 判斷串 str1 和 str2 是否相等:n");StrAssign(str1,cstr1);StrAssign(str2,cstr2);m=StrEqual(str1,str2);if(m=1)printf("EQU

溫馨提示

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

評論

0/150

提交評論