版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 數(shù) 據(jù) 結(jié) 構(gòu) 課 程 設(shè) 計(jì)設(shè)計(jì)題目: 串的存儲(chǔ)表示及基本操作 學(xué)生姓名: 專(zhuān)業(yè)班級(jí): 指導(dǎo)教師: 完成時(shí)間: 信息工程學(xué) 院 信科 系0 / 18課程設(shè)計(jì)成績(jī)?cè)u(píng)定表(本科)課題名稱(chēng) 串的存儲(chǔ)表示及基本操作院 系年級(jí)專(zhuān)業(yè)學(xué) 號(hào)姓 名成 績(jī)課題設(shè)計(jì)目的與設(shè)計(jì)意義1、 課題設(shè)計(jì)目的:(1):掌握串的基本存儲(chǔ)結(jié)構(gòu);(2):掌握串的基本運(yùn)算及其實(shí)現(xiàn);2、課題設(shè)計(jì)意義:通過(guò)此次對(duì)于串及其基本操作的課程設(shè)計(jì),更深層次的了解串的基本概念、特征,掌握串的基本存儲(chǔ)結(jié)構(gòu)、基本運(yùn)算及其實(shí)現(xiàn)。根據(jù)課程設(shè)計(jì)的目的和基本要求,注意一些容易發(fā)生錯(cuò)誤的問(wèn)題,從而進(jìn)一步的認(rèn)真分析問(wèn)題、總結(jié)結(jié)論和經(jīng)驗(yàn),理解設(shè)計(jì)的思想和構(gòu)思。
2、聯(lián)系到生活上的實(shí)際問(wèn)題,培養(yǎng)課程設(shè)計(jì)的能力及思想構(gòu)思。指導(dǎo)教師:年 月 日目 錄第一章 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的目的、基本要求及其解析11.課程設(shè)計(jì)的目的:12.課程設(shè)計(jì)要求:13.課程設(shè)計(jì)題目解析:1第二章 程序設(shè)計(jì)內(nèi)容11程序設(shè)計(jì)的基本思想12.程序設(shè)計(jì)代碼:33程序運(yùn)行結(jié)果:8第三章 程序設(shè)計(jì)的優(yōu)缺點(diǎn)及遇到的問(wèn)題123.1:課程設(shè)計(jì)的優(yōu)缺點(diǎn):123.2 遇到的問(wèn)題:12第四章 總結(jié)124.1 思考和小結(jié):124.2 參考文獻(xiàn):13第一章 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的目的、基本要求及其解析1.課程設(shè)計(jì)的目的:(1) :掌握串的基本存儲(chǔ)結(jié)構(gòu)。(2) :掌握串的基本運(yùn)算及其實(shí)現(xiàn)。2.課程設(shè)計(jì)要求:(1) :將
3、上機(jī)程序全部調(diào)試通過(guò)。(2) :結(jié)合程序分析運(yùn)行結(jié)果。3.課程設(shè)計(jì)題目解析: 顧名思義,串及其基本操作,就是要在理解串的基本概念和特征的基礎(chǔ)上,了解串的內(nèi)部表示和處理方法。這樣才能有效地實(shí)現(xiàn)串的基本操作。串,也還是字符串,是一種特殊的線性表。特殊之處在于表中的每一個(gè)元素都是字符,以及由此而要求的一些特殊操作。在串及其基本操作中,要求的操作有聯(lián)接、求串長(zhǎng)、求子串、比較串的大小、串的插入、串的刪除、子串的定位和置換。因?yàn)樗M(jìn)行的操作比較零散也比較多,所以就要用到多個(gè)函數(shù)把這個(gè)整體的課程設(shè)計(jì)劃分成多個(gè)模塊來(lái)進(jìn)行。每個(gè)函數(shù)對(duì)應(yīng)一個(gè)功能。在主函數(shù)中,用一個(gè)菜單,就可以將原來(lái)的已分模塊的函數(shù)系統(tǒng)地進(jìn)行檢
4、驗(yàn)及操作。在程序設(shè)計(jì)的過(guò)程中,根據(jù)課程設(shè)計(jì)的目的和基本要求,注意一些容易出錯(cuò)的地方及問(wèn)題。第二章 程序設(shè)計(jì)內(nèi)容1程序設(shè)計(jì)的基本思想:(對(duì)于串及其基本操作中,程序被分割為很多的模塊。所以以下的程序設(shè)計(jì)業(yè)分成好幾個(gè)方面來(lái)一一闡述)1) . 字符串的聯(lián)接:在該函數(shù)中,strcat(str1,str2)就是將串str2緊接著放在串str1的串值的末尾,組成一個(gè)新的串str1。最后所得的新的str1即為所求的原來(lái)的兩個(gè)字符str1和str1的聯(lián)接后的結(jié)果。輸出即是。2) .比較兩個(gè)字符串的大?。涸谠摵瘮?shù)中,strcmp(str1,str2)是一個(gè)函數(shù),它的功能是比較兩個(gè)串str1和str2的大小,通過(guò)i
5、f語(yǔ)句的判斷函數(shù)strcmp(str1,str2)的函數(shù)值大小,其中函數(shù)值小于、等于和大于0時(shí),分別表示str1<str2、str1=str2、str1>str2,其對(duì)應(yīng)的輸出結(jié)果分別為-1、0、1。3) 求字符串的串長(zhǎng):在該函數(shù)中,要先定義一個(gè)整形變量i,strlen(str)表示字符串str的長(zhǎng)度,它是一個(gè)整形函數(shù)。通過(guò)函數(shù)strlen(str)來(lái)算出字符串的長(zhǎng)度,然后賦值給整形變量i輸出,從而i的值即為所求的字符串的長(zhǎng)度。4) . 串的復(fù)制:在該函數(shù)中,首先分別輸入兩串字符串str1和str2,通過(guò)函數(shù)strcpy(str1,str2)來(lái)實(shí)現(xiàn)str2復(fù)制給str1的功能,得到
6、復(fù)制后的字符串為新的str1,輸出即為復(fù)制后的結(jié)果。 5) .求字符串的插入:該函數(shù)中有三個(gè)形參,兩個(gè)是字符串s和t,一個(gè)是整形形參i。即把字符串t插入到s的第i個(gè)元素之后。在函數(shù)中,定義兩個(gè)個(gè)整形變量j、k,其中&s->curlen和&t->curlen分別指原字符串和要插入字符串的長(zhǎng)度。用一個(gè)for循環(huán),"for(j=s->curlen1;j>=i;j-)",滿(mǎn)足循環(huán)條件的要進(jìn)行的操作時(shí)把s->chj賦值給s->chj+t->curlen,就是讓s->ch中空出等于&t-.curlen的長(zhǎng)度的空間,
7、好讓t可以插入。下面再用一個(gè)for循環(huán)''for(k=0,j=i;t->chk!='0'k+,j+)",再把t->chk賦值給s->chj;這樣的把t插入到了s中。最后,給s->chs->curlen+t->curlen賦值一個(gè)"0",這時(shí)的s->chs->curlen+t->curlen就是一個(gè)新的字符串,然后把s->chs->curlen+t->curlen再賦值給s->curlen即可得到所求的新的字符串6) .求串的刪除:該函數(shù)有三個(gè)形參,一個(gè)是字
8、符串s,兩個(gè)是整形形參i和j,在函數(shù)中定義一個(gè)整形變量k,輸入原字符串和其長(zhǎng)度&s->curlen,函數(shù)中用for循環(huán),"for(k=i+j-1;s->chk!='0'k+)",把s->chk賦值給s->chk-j,既用覆蓋的方式刪除從第i個(gè)元素開(kāi)始連續(xù)j個(gè)元素,最后把''0''賦值給s->chk-j,再把k-j賦值給s->curlen。s->ch就是所求的刪除從第i個(gè)元素開(kāi)始連續(xù)j個(gè)元素后的新的字符串。 7) . .求字符串的置換:這個(gè)函數(shù)中有四個(gè)形參,兩個(gè)字符串s和t,兩個(gè)
9、整形形參i和j,在函數(shù)內(nèi)部還要定義五個(gè)整形變量k=0、l、n、m、p。首先把i+j賦值給l;通過(guò)輸入輸入主字符串和要置換的字符串的長(zhǎng)度、主字符串和要置換的字符串s和t。先要判斷j和將要被置換的字符串的串長(zhǎng)關(guān)系,如果剛好相等,就讓t從第一個(gè)元素開(kāi)始,s從第第i個(gè)元素開(kāi)始,一一賦值。如果t的串長(zhǎng)比較大,則用一個(gè)for循環(huán),for''(k=s->curlen;k>=i+j-1;k+)'',sk賦值給sk-j+t->scurlen,這樣剩余的空間剛好可以用來(lái)存放t的,同樣的,如果t的串長(zhǎng)比較小,同樣用以for循環(huán),''for(k=i+j
10、-1,m=i;sk!='0'k+,m+)'',sk賦值給sm+t->curlen-1,s剩余的空間也剛好用來(lái)存放t的。然后,把t中的元素對(duì)應(yīng)的賦值給s。最后,在s的最后一個(gè)元素后賦值一個(gè)'0',這時(shí)的s,就是t置換后的新的字符串。8) .子串的定位:這個(gè)函數(shù)有兩個(gè)形參,s和t,在函數(shù)內(nèi)部,還要定義兩個(gè)整形變量i=0和j=0。用while語(yǔ)句'' while(i<s->curlen)&&(j<t->curlen))'',滿(mǎn)足條件后進(jìn)行的操作是檢驗(yàn)對(duì)應(yīng)的s和t的元素是否相等
11、,相等時(shí)就i+,j+,用i減去t的串長(zhǎng)即為t作為子串在s中的定位位置。不相等時(shí),就用i減去j加上1賦值給i,j=0,往下掃描時(shí),就從t的第一個(gè)元素再接著掃描。9) 主函數(shù):在主函數(shù)中,因?yàn)橐疃噍斎雰蓚€(gè)字符串,所以要先定義兩個(gè)字符串s和t。有的主函數(shù)需要用到整形的變量,最多是兩個(gè),所以也要定義兩個(gè)整形變量k和m。函數(shù)中,有很多的功能不同的函數(shù),這樣就要求驗(yàn)證很多次,所以在這里我們考慮用菜單來(lái)實(shí)現(xiàn)。用一個(gè)while循環(huán),循環(huán)的條件為永真,這樣當(dāng)做完一個(gè)函數(shù)的驗(yàn)證時(shí),系統(tǒng)就會(huì)自動(dòng)讓你接著選擇。在while循環(huán)下,輸入一個(gè)數(shù)字。每個(gè)數(shù)字代表不同的功能。然后用一個(gè)switch語(yǔ)句,不同的case對(duì)應(yīng)不
12、同的函數(shù),如:case(0)就可以代表求字符串的串長(zhǎng)。2.程序設(shè)計(jì)代碼:#include<stdio.h>#include<string.h>#define maxsize 32 /*假設(shè)串可能的最大長(zhǎng)度是32*/typedef structchar chmaxsize; /*串的存儲(chǔ)空間*/int curlen; /*當(dāng)前串的長(zhǎng)度*/seqstring;seqstring *s;void strcats() /*串的聯(lián)接*/seqstring str132,str232;printf("請(qǐng)輸入兩串字符串:"); /*輸入兩串字符串*/ scanf(
13、"%s%s",str1,str2); /*接受輸入的字符串*/strcat(str1,str2); /*聯(lián)接兩個(gè)字符串*/puts(str1); /*輸出聯(lián)接后的字符串*/void strcmps() /*比較字符串的大小*/ seqstring str132,str232;printf("請(qǐng)輸入兩串字符串:"); scanf("%s%s",str1,str2);if(strcmp(str1,str2)>0)printf("1");if(strcmp(str1,str2)=0)printf("0&q
14、uot;);if(strcmp(str1,str2)<0)printf("-1");void strlens() /*求字符串的長(zhǎng)度*/ seqstring str32;int i;printf("請(qǐng)輸入一串字符串:");scanf("%s",str);i=strlen(str);printf("此字符串的串長(zhǎng)為:%d",i);void strcpys() /*串的復(fù)制*/seqstring str132,str232;printf("請(qǐng)輸入兩串字符串:"); scanf("%s
15、%s",str1,str2);strcpy(str1,str2);printf("復(fù)制后的字符串為%s",str1);void insert(seqstring *s,int i,seqstring *t) /*串的插入*/int j,k;printf("請(qǐng)輸入原字符串和其長(zhǎng)度:");scanf("%s%d",s,&s->curlen);printf("請(qǐng)輸入要插入的字符串及其長(zhǎng)度:");scanf("%s%d",t,&t->curlen);for(j=s-
16、>curlen-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;
17、printf("請(qǐng)輸入原字符串和其長(zhǎng)度:");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
18、=i+j; printf("請(qǐng)輸入主字符串的長(zhǎng)度:");scanf("%d",&s->curlen); printf("請(qǐng)輸入要置換的字符串的長(zhǎng)度:");scanf("%d",&t->curlen); printf("請(qǐng)輸入主字符串和要置換的字符串:"); scanf("%s%s",s,t);if(j=t->curlen) for(k=0;t->chk!='0'k+) s->chi-1=t->chk; i+;
19、 s->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-
20、>curlen+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->curl
21、en-j; s->chs->curlen='0' printf("置換后的字符串為:"); puts(s->ch); int index(seqstring *s,seqstring *t) /*子串的定位*/int i=0,j=0;printf("請(qǐng)輸入主串和子串的串長(zhǎng):");scanf("%d%d",&s->curlen,&t->curlen);printf("請(qǐng)輸入主串和子串:");scanf("%s%s",s,t);while
22、(i<s->curlen)&&(j<t->curlen)if(s->chi=t->chj)i+;j+; /*繼續(xù)比較后面的字符*/elsei=i-j+1; j=0; /*從模式的第一個(gè)字符進(jìn)行新的一趟匹配*/ 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:求串長(zhǎng)n3:串復(fù)制n4:插入n5:刪除n
23、6:置換子串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("請(qǐng)輸入插入的位置:"); scanf("%d",&i); insert(&s,i,&t);break;case 5:printf("請(qǐng)輸入刪除的位置和個(gè)數(shù):"); scanf(&qu
24、ot;%d%d",&i,&j); deletes(&s,i,j);break;case 6:printf("請(qǐng)輸入置換的位置和個(gè)數(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程序運(yùn)行結(jié)果:3.1串的聯(lián)接運(yùn)行結(jié)果如圖1圖1 串聯(lián)接3.2串比較的運(yùn)行結(jié)果如圖2圖2 串比較3.3求串長(zhǎng)的運(yùn)行結(jié)果如圖3圖3 求串長(zhǎng)3.4串復(fù)制的運(yùn)行結(jié)果如圖4圖4 串復(fù)制3.5串插入的運(yùn)行結(jié)果如圖5圖5 串插入3.6串刪除的運(yùn)行結(jié)果如圖6圖6 串刪除3.7置換子串的運(yùn)行結(jié)果如圖7圖7 置換子串3.8子串定位的運(yùn)行結(jié)果如圖8圖8 子串定位第三章
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版節(jié)能環(huán)保設(shè)施運(yùn)營(yíng)管理合同范本3篇
- 二零二五年汽車(chē)租賃公司兼職司機(jī)合同3篇
- 二零二五版家居用品寄售代理合同范本3篇
- 二零二五版草原生態(tài)補(bǔ)償機(jī)制承包合同3篇
- 二零二五版插畫(huà)師合作合同范本-漫畫(huà)創(chuàng)作合作與版權(quán)歸屬協(xié)議3篇
- 二零二五版建筑工程施工企業(yè)施工許可證注銷(xiāo)合同3篇
- 二零二五版安徽農(nóng)民工就業(yè)跟蹤服務(wù)合同范本3篇
- 2025版塊石石材礦山投資合作合同3篇
- 基于2025年度行業(yè)標(biāo)準(zhǔn)的招投標(biāo)實(shí)習(xí)合同3篇
- 二零二五年金融創(chuàng)新抵押借款合同范本分享3篇
- 蔣詩(shī)萌小品《誰(shuí)殺死了周日》臺(tái)詞完整版
- TB 10010-2008 鐵路給水排水設(shè)計(jì)規(guī)范
- 黑色素的合成與美白產(chǎn)品的研究進(jìn)展
- 建筑史智慧樹(shù)知到期末考試答案2024年
- 金蓉顆粒-臨床用藥解讀
- 社區(qū)健康服務(wù)與管理教案
- 2023-2024年家政服務(wù)員職業(yè)技能培訓(xùn)考試題庫(kù)(含答案)
- 2023年(中級(jí))電工職業(yè)技能鑒定考試題庫(kù)(必刷500題)
- 藏歷新年文化活動(dòng)的工作方案
- 果酒釀造完整
- 第4章-理想氣體的熱力過(guò)程
評(píng)論
0/150
提交評(píng)論