串的存儲表示及基本操作課程設計_第1頁
串的存儲表示及基本操作課程設計_第2頁
串的存儲表示及基本操作課程設計_第3頁
串的存儲表示及基本操作課程設計_第4頁
串的存儲表示及基本操作課程設計_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設 計設計題目: 串的存儲表示及基本操作 學生姓名: 專業(yè)班級: 指導教師: 完成時間: 信息工程學 院 信科 系課程設計成績評定表(本科)課題名稱 串的存儲表示及基本操作院 系年級專業(yè)學 號姓 名成 績課題設計目的與設計意義1、 課題設計目的:(1):掌握串的基本存儲結(jié)構(gòu);(2):掌握串的基本運算及其實現(xiàn);2、課題設計意義:通過此次對于串及其基本操作的課程設計,更深層次的了解串的基本概念、特征,掌握串的基本存儲結(jié)構(gòu)、基本運算及其實現(xiàn)。根據(jù)課程設計的目的和基本要求,注意一些容易發(fā)生錯誤的問題,從而進一步的認真分析問題、總結(jié)結(jié)論和經(jīng)驗,理解設計的思想和構(gòu)思。聯(lián)系到生活上

2、的實際問題,培養(yǎng)課程設計的能力及思想構(gòu)思。指導教師:年 月 日目 錄第一章 數(shù)據(jù)結(jié)構(gòu)課程設計的目的、基本要求及其解析11.課程設計的目的:12.課程設計要求:13.課程設計題目解析:1第二章 程序設計內(nèi)容11程序設計的基本思想12.程序設計代碼:33程序運行結(jié)果:8第三章 程序設計的優(yōu)缺點及遇到的問題123.1:課程設計的優(yōu)缺點:123.2 遇到的問題:12第四章 總結(jié)124.1 思考和小結(jié):124.2 參考文獻:13第一章 數(shù)據(jù)結(jié)構(gòu)課程設計的目的、基本要求及其解析1.課程設計的目的:(1) :掌握串的基本存儲結(jié)構(gòu)。(2) :掌握串的基本運算及其實現(xiàn)。2.課程設計要求:(1) :將上機程序全部

3、調(diào)試通過。(2) :結(jié)合程序分析運行結(jié)果。3.課程設計題目解析: 顧名思義,串及其基本操作,就是要在理解串的基本概念和特征的基礎(chǔ)上,了解串的內(nèi)部表示和處理方法。這樣才能有效地實現(xiàn)串的基本操作。串,也還是字符串,是一種特殊的線性表。特殊之處在于表中的每一個元素都是字符,以及由此而要求的一些特殊操作。在串及其基本操作中,要求的操作有聯(lián)接、求串長、求子串、比較串的大小、串的插入、串的刪除、子串的定位和置換。因為所要進行的操作比較零散也比較多,所以就要用到多個函數(shù)把這個整體的課程設計劃分成多個模塊來進行。每個函數(shù)對應一個功能。在主函數(shù)中,用一個菜單,就可以將原來的已分模塊的函數(shù)系統(tǒng)地進行檢驗及操作。在

4、程序設計的過程中,根據(jù)課程設計的目的和基本要求,注意一些容易出錯的地方及問題。第二章 程序設計內(nèi)容1程序設計的基本思想:(對于串及其基本操作中,程序被分割為很多的模塊。所以以下的程序設計業(yè)分成好幾個方面來一一闡述)1) . 字符串的聯(lián)接:在該函數(shù)中,strcat(str1,str2)就是將串str2緊接著放在串str1的串值的末尾,組成一個新的串str1。最后所得的新的str1即為所求的原來的兩個字符str1和str1的聯(lián)接后的結(jié)果。輸出即是。2) .比較兩個字符串的大?。涸谠摵瘮?shù)中,strcmp(str1,str2)是一個函數(shù),它的功能是比較兩個串str1和str2的大小,通過if語句的判斷

5、函數(shù)strcmp(str1,str2)的函數(shù)值大小,其中函數(shù)值小于、等于和大于0時,分別表示str1<str2、str1=str2、str1>str2,其對應的輸出結(jié)果分別為-1、0、1。3) 求字符串的串長:在該函數(shù)中,要先定義一個整形變量i,strlen(str)表示字符串str的長度,它是一個整形函數(shù)。通過函數(shù)strlen(str)來算出字符串的長度,然后賦值給整形變量i輸出,從而i的值即為所求的字符串的長度。4) . 串的復制:在該函數(shù)中,首先分別輸入兩串字符串str1和str2,通過函數(shù)strcpy(str1,str2)來實現(xiàn)str2復制給str1的功能,得到復制后的字符

6、串為新的str1,輸出即為復制后的結(jié)果。 5) .求字符串的插入:該函數(shù)中有三個形參,兩個是字符串s和t,一個是整形形參i。即把字符串t插入到s的第i個元素之后。在函數(shù)中,定義兩個個整形變量j、k,其中&s->curlen和&t->curlen分別指原字符串和要插入字符串的長度。用一個for循環(huán),"for(j=s->curlen1;j>=i;j-)",滿足循環(huán)條件的要進行的操作時把s->chj賦值給s->chj+t->curlen,就是讓s->ch中空出等于&t-.curlen的長度的空間,好讓t可以插

7、入。下面再用一個for循環(huán)''for(k=0,j=i;t->chk!='0'k+,j+)",再把t->chk賦值給s->chj;這樣的把t插入到了s中。最后,給s->chs->curlen+t->curlen賦值一個"0",這時的s->chs->curlen+t->curlen就是一個新的字符串,然后把s->chs->curlen+t->curlen再賦值給s->curlen即可得到所求的新的字符串6) .求串的刪除:該函數(shù)有三個形參,一個是字符串s,兩個

8、是整形形參i和j,在函數(shù)中定義一個整形變量k,輸入原字符串和其長度&s->curlen,函數(shù)中用for循環(huán),"for(k=i+j-1;s->chk!='0'k+)",把s->chk賦值給s->chk-j,既用覆蓋的方式刪除從第i個元素開始連續(xù)j個元素,最后把''0''賦值給s->chk-j,再把k-j賦值給s->curlen。s->ch就是所求的刪除從第i個元素開始連續(xù)j個元素后的新的字符串。 7) . .求字符串的置換:這個函數(shù)中有四個形參,兩個字符串s和t,兩個整形形參i和

9、j,在函數(shù)內(nèi)部還要定義五個整形變量k=0、l、n、m、p。首先把i+j賦值給l;通過輸入輸入主字符串和要置換的字符串的長度、主字符串和要置換的字符串s和t。先要判斷j和將要被置換的字符串的串長關(guān)系,如果剛好相等,就讓t從第一個元素開始,s從第第i個元素開始,一一賦值。如果t的串長比較大,則用一個for循環(huán),for''(k=s->curlen;k>=i+j-1;k+)'',sk賦值給sk-j+t->scurlen,這樣剩余的空間剛好可以用來存放t的,同樣的,如果t的串長比較小,同樣用以for循環(huán),''for(k=i+j-1,m=i

10、;sk!='0'k+,m+)'',sk賦值給sm+t->curlen-1,s剩余的空間也剛好用來存放t的。然后,把t中的元素對應的賦值給s。最后,在s的最后一個元素后賦值一個'0',這時的s,就是t置換后的新的字符串。8) .子串的定位:這個函數(shù)有兩個形參,s和t,在函數(shù)內(nèi)部,還要定義兩個整形變量i=0和j=0。用while語句'' while(i<s->curlen)&&(j<t->curlen))'',滿足條件后進行的操作是檢驗對應的s和t的元素是否相等,相等時就i

11、+,j+,用i減去t的串長即為t作為子串在s中的定位位置。不相等時,就用i減去j加上1賦值給i,j=0,往下掃描時,就從t的第一個元素再接著掃描。9) 主函數(shù):在主函數(shù)中,因為要最多輸入兩個字符串,所以要先定義兩個字符串s和t。有的主函數(shù)需要用到整形的變量,最多是兩個,所以也要定義兩個整形變量k和m。函數(shù)中,有很多的功能不同的函數(shù),這樣就要求驗證很多次,所以在這里我們考慮用菜單來實現(xiàn)。用一個while循環(huán),循環(huán)的條件為永真,這樣當做完一個函數(shù)的驗證時,系統(tǒng)就會自動讓你接著選擇。在while循環(huán)下,輸入一個數(shù)字。每個數(shù)字代表不同的功能。然后用一個switch語句,不同的case對應不同的函數(shù),如

12、:case(0)就可以代表求字符串的串長。2.程序設計代碼:#include<stdio.h>#include<string.h>#define maxsize 32 /*假設串可能的最大長度是32*/typedef structchar chmaxsize; /*串的存儲空間*/int curlen; /*當前串的長度*/seqstring;seqstring *s;void strcats() /*串的聯(lián)接*/seqstring str132,str232;printf("請輸入兩串字符串:"); /*輸入兩串字符串*/ scanf("

13、%s%s",str1,str2); /*接受輸入的字符串*/strcat(str1,str2); /*聯(lián)接兩個字符串*/puts(str1); /*輸出聯(lián)接后的字符串*/void strcmps() /*比較字符串的大小*/ seqstring str132,str232;printf("請輸入兩串字符串:"); scanf("%s%s",str1,str2);if(strcmp(str1,str2)>0)printf("1");if(strcmp(str1,str2)=0)printf("0");

14、if(strcmp(str1,str2)<0)printf("-1");void strlens() /*求字符串的長度*/ seqstring str32;int i;printf("請輸入一串字符串:");scanf("%s",str);i=strlen(str);printf("此字符串的串長為:%d",i);void strcpys() /*串的復制*/seqstring str132,str232;printf("請輸入兩串字符串:"); scanf("%s%s&quo

15、t;,str1,str2);strcpy(str1,str2);printf("復制后的字符串為%s",str1);void insert(seqstring *s,int i,seqstring *t) /*串的插入*/int j,k;printf("請輸入原字符串和其長度:");scanf("%s%d",s,&s->curlen);printf("請輸入要插入的字符串及其長度:");scanf("%s%d",t,&t->curlen);for(j=s->cu

16、rlen-1;j>=i;j-)s->chj+t->curlen=s->chj;for(k=0,j=i;t->chk!='0'k+,j+)s->chj=t->chk;s->chs->curlen+t->curlen='0's->curlen=s->curlen+t->curlen;printf("插入后的字符串為:");puts(s->ch);void deletes(seqstring *s,int i,int j) /*串的刪除*/ int k;printf

17、("請輸入原字符串和其長度:");scanf("%s%d",s,&s->curlen); for(k=i+j-1;s->chk!='0'k+)s->chk-j=s->chk;s->chk-j='0's->curlen=k-j; printf("刪除后的字符串為:");puts(s->ch);void replace(seqstring *s,int i,int j,seqstring *t) /*串的置換*/int k=0,l,n,m,p;l=i+j;

18、printf("請輸入主字符串的長度:");scanf("%d",&s->curlen); printf("請輸入要置換的字符串的長度:");scanf("%d",&t->curlen); printf("請輸入主字符串和要置換的字符串:"); scanf("%s%s",s,t);if(j=t->curlen) for(k=0;t->chk!='0'k+) s->chi-1=t->chk; i+; s->

19、;curlen=s->curlen+t->curlen-j; s->chs->curlen='0' printf("置換后的字符串為:"); puts(s->ch); elseif(j>t->curlen) while(s->chl-1!='0')m=j-t->curlen; s->chl-m-1=s->chl-1;l+;for(k=0;t->chk!='0'k+)s->chi-1=t->chk;i+;s->curlen=s->cu

20、rlen+t->curlen-j; s->chs->curlen='0' printf("置換后的字符串為:"); puts(s->ch);elseif(j<t->curlen) p=n=s->curlen;while(n>=i+j) m=t->curlen-j; s->chn+m-1=s->chn-1; n-; for(k=0;t->chk!='0'k+) s->chi-1=t->chk; i+;s->curlen=p+t->curlen-j;

21、s->chs->curlen='0' printf("置換后的字符串為:"); puts(s->ch); int index(seqstring *s,seqstring *t) /*子串的定位*/int i=0,j=0;printf("請輸入主串和子串的串長:");scanf("%d%d",&s->curlen,&t->curlen);printf("請輸入主串和子串:");scanf("%s%s",s,t);while(i<

22、s->curlen)&&(j<t->curlen)if(s->chi=t->chj)i+;j+; /*繼續(xù)比較后面的字符*/elsei=i-j+1; j=0; /*從模式的第一個字符進行新的一趟匹配*/ if(j=t->curlen) printf("n匹配成功!");else printf("n匹配失敗!");void main()int i=1,j;seqstring s,t;while(i) printf("0:串聯(lián)接n1:串比較n2:求串長n3:串復制n4:插入n5:刪除n6:置換子串

23、n7:子串定位n");scanf("%d",&i);switch(i)case 0:strcats();break;case 1:strcmps();break;case 2:strlens();break;case 3:strcpys();break;case 4:printf("請輸入插入的位置:"); scanf("%d",&i); insert(&s,i,&t);break;case 5:printf("請輸入刪除的位置和個數(shù):"); scanf("%d%

24、d",&i,&j); deletes(&s,i,j);break;case 6:printf("請輸入置換的位置和個數(shù):"); scanf("%d%d",&i,&j); replace(&s,i,j,&t);break;case 7:index(&s,&t);break;printf("n0:停止n1:繼續(xù)n");scanf("%d",&i);3程序運行結(jié)果:3.1串的聯(lián)接運行結(jié)果如圖1圖1 串聯(lián)接3.2串比較的運行結(jié)果如圖2圖2 串比較3.3求串長的運行結(jié)果如圖3圖3 求串長3.4串復制的運行結(jié)果如圖4圖4 串復制3.5串插入的運行結(jié)果如圖5圖5 串插入3.6串刪除的運行結(jié)果如圖6圖6 串刪除

溫馨提示

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

評論

0/150

提交評論