




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 串的基本操作 一、實驗?zāi)康摹⒁饬x(1)理解串的堆分配存儲結(jié)構(gòu)。(2)理解用它們表示時插入,生成串,聯(lián)接串與求子串的算法。(3)根據(jù)具體問題的需要,能夠設(shè)計出相關(guān)算法。二、實驗內(nèi)容及要求說明1:學(xué)生在上機實驗時,需要自己設(shè)計出所涉及到的函數(shù),同時設(shè)計多組輸入數(shù)據(jù)并編寫主程序分別調(diào)用這些函數(shù),調(diào)試程序并對相應(yīng)的輸出作出分析;修改輸入數(shù)據(jù),預(yù)期輸出并驗證輸出的結(jié)果,加深對有關(guān)算法的理解。具體要求:定義串的堆分配存儲,完成串的基本操作:插入,生成串,聯(lián)接串,求子串等。3、 實驗所涉及的知識點C語言算法、循環(huán)算法、串的堆分配存儲結(jié)構(gòu)、插入,生成串,聯(lián)接串與求子串的算法。四、實驗結(jié)果及分析(所輸入的數(shù)據(jù)
2、及相應(yīng)的運行結(jié)果,運行結(jié)果要有提示信息,運行結(jié)果采用截圖方式給出。) 五、總結(jié)與體會(調(diào)試程序的心得與體會,若實驗課上未完成調(diào)試,要認真找出錯誤并分析原因等。)調(diào)試程序時,出現(xiàn)了許多錯誤。如:串的堆分配存儲結(jié)構(gòu)、串的聯(lián)接等。另外還有一些語法上的錯誤。由于對所學(xué)知識點概念模糊,試驗課上未能完成此次上機作業(yè)。后來經(jīng)過查閱教材,瀏覽網(wǎng)頁等方式,才完成試驗。這次試驗出現(xiàn)錯誤最重要的原因就是對課本知識點理解不深刻以及編寫代碼時的粗心。以后要都去練習(xí)、實踐,以完善自己的不足。六、程序清單(包含注釋)#include <stdio.h>#include <malloc.h>#incl
3、ude <stdlib.h>typedef char Status;int strlen(char *p) int i=0; while(*p+)i+; return i;typedef structchar *ch;/ 若是非空串,則按串長分配存儲區(qū),否則ch為NULL int length; / 串長度 HString;/ 初始化(產(chǎn)生空串)字符串Tvoid InitString(HString *T)(*T).length=0;(*T).ch=NULL;/ 生成一個其值等于串常量chars的串T Status StrAssign(HString *T, char *chars
4、)int i,j;if(*T).ch)free(*T).ch); / 釋放T原有空間 i = strlen(chars); / 求chars的長度i if(!i) / chars的長度為0 (*T).ch = NULL;(*T).length = 0;else/ chars的長度不為0 (*T).ch = (char*)malloc(i*sizeof(char); / 分配串空間 if(!(*T).ch) / 分配串空間失敗 exit(0);for(j = 0; j < i; j+) / 拷貝串 (*T).chj = charsj;(*T).length = i;return 1;/ 由
5、串S復(fù)制得串Tint StrCopy(HString *T,HString S)int i; if(*T).ch)free(*T).ch); / 釋放T原有空間 (*T).ch=(char*)malloc(S.length*sizeof(char); / 分配串空間 if(!(*T).ch) / 分配串空間失敗 exit(0);for(i=0;i<S.length;i+) / 拷貝串 (*T).chi=S.chi;(*T).length=S.length;return 1;/ 若S為空串,則返回1,否則返回0 int StrEmpty(HString S)if(S.length = 0
6、&& S.ch = NULL)return 1;elsereturn 0;/ 若S>T,則返回值>0;若S=T,則返回值=0;若S<T,則返回值<0int StrCompare(HString S,HString T)int i;for(i=0;i<S.length && i<T.length;+i)if(S.chi != T.chi)return S.chi-T.chi;return S.length-T.length;/ 返回S的元素個數(shù),稱為串的長度 int StrLength(HString S)return S.le
7、ngth;/ 將S清為空串 int ClearString(HString *S)if(*S).ch)free(*S).ch);(*S).ch=NULL;(*S).length=0;return 1;/ 用T返回由S1和S2聯(lián)接而成的新串int Concat(HString *T,HString S1,HString S2)int i;if(*T).ch)free(*T).ch); / 釋放舊空間 (*T).length=S1.length+S2.length;(*T).ch=(char *)malloc(*T).length*sizeof(char);/分配新串的長度if(!(*T).ch)
8、exit(0);for(i=0;i<S1.length;i+)/將S1接到新串T的后面(*T).chi=S1.chi;for(i=0;i<S2.length;i+)/將S2接到新串T的后面(*T).chS1.length+i=S2.chi;return 1;/ 用Sub返回串S的第pos個字符起長度為len的子串。int SubString(HString *Sub, HString S,int pos,int len)int i;if(pos<1|pos>S.length|len<0|len>S.length-pos+1)return 0;if(*Sub)
9、.ch)free(*Sub).ch); / 釋放舊空間 if(!len) / 空子串 (*Sub).ch=NULL;(*Sub).length=0;else / 完整子串 (*Sub).ch=(char*)malloc(len*sizeof(char);if(!(*Sub).ch)exit(0);for(i=0;i<=len-1;i+)(*Sub).chi=S.chpos-1+i;(*Sub).length=len;return 1;/ 算法4.1 / T為非空串。若主串S中第pos個字符之后存在與T相等的子串, / 則返回第一個這樣的子串在S中的位置,否則返回0 int Index(H
10、String S,HString T,int pos) int n,m,i;HString sub;InitString(&sub);if(pos>0)n=StrLength(S);m=StrLength(T);i=pos;while(i<=n-m+1)/從第i個位置開始求與T等長的子串,循環(huán)直到找到SubString(&sub,S,i,m);/從第i個位置開始求得子串if(StrCompare(sub,T)!=0)/將求得的子串與T對比,若不等則i+i;elsereturn i;return 0;/ 算法4.4/ 在串S的第pos個字符之前插入串Tsint Str
11、Insert(HString *S,int pos,HString T) int i;if(pos<1|pos>(*S).length+1) / pos不合法 return 0;if(T.length) / T非空,則重新分配空間,插入T (*S).ch = (char*)realloc(*S).ch, (*S).length+T.length)*sizeof(char);if(!(*S).ch)exit(0);for(i=(*S).length-1;i>=pos-1;-i) / 為插入T而騰出位置 (*S).chi+T.length=(*S).chi; for(i=0;i&
12、lt;T.length;i+)(*S).chpos-1+i=T.chi; / 插入T (*S).length+=T.length;return 1;/ 從串S中刪除第pos個字符起長度為len的子串int StrDelete(HString *S,int pos,int len)int i;if(*S).length<pos+len-1)exit(0);for(i=pos-1;i<=(*S).length-len;i+)(*S).chi=(*S).chi+len;(*S).length-=len;(*S).ch=(char*)realloc(*S).ch,(*S).length*s
13、izeof(char);return 1;/ 用V替換主串S中出現(xiàn)的所有與T相等的不重疊的子串int Replace(HString *S,HString T,HString V)int i=1; / 從串S的第一個字符起查找串T if(StrEmpty(T) / T是空串 return 0;doi=Index(*S,T,i); / 結(jié)果i為從上一個i之后找到的子串T的位置 if(i) / 串S中存在串T StrDelete(S,i,StrLength(T); / 刪除該串T StrInsert(S,i,V); / 在原串T的位置插入串V i+=StrLength(V); / 在插入的串V后面
14、繼續(xù)查找串T while(i);return 1;void DestroyString()/ 堆分配類型的字符串無法銷毀 / 輸出T字符串void StrPrint(HString T)int i;for(i=0;i<T.length;i+)printf("%c",T.chi);printf("n");int main()int i;char c,*p="God bye!",*q="God luck!"HString t,s,r;/ HString類型必需初始化InitString(&t); Init
15、String(&s);InitString(&r);StrAssign(&t,p);printf("串t為: ");StrPrint(t);printf("串長為%d 串空否?%d(1:空 0:否)n",StrLength(t),StrEmpty(t);StrAssign(&s,q);printf("串s為: ");StrPrint(s);i=StrCompare(s,t);if(i<0)c='<'else if(i=0)c='='elsec='>
16、;'printf("串s%c串tn",c);Concat(&r,t,s);printf("串t聯(lián)接串s產(chǎn)生的串r為: ");StrPrint(r);StrAssign(&s,"oo");printf("串s為: ");StrPrint(s);StrAssign(&t,"o");printf("串t為: ");StrPrint(t);Replace(&r,t,s);printf("把串r中和串t相同的子串用串s代替后,串r為:n
17、");StrPrint(r);ClearString(&s);printf("串s清空后,串長為%d 空否?%d(1:空 0:否)n",StrLength(s),StrEmpty(s);SubString(&s,r,6,4);printf("串s為從串r的第6個字符起的4個字符,長度為%d 串s為: ",s.length);StrPrint(s);StrCopy(&t,r);printf("復(fù)制串t為串r,串t為: ");StrPrint(t);StrInsert(&t,6,s);printf("在串t的第6個字符前
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 夏季混凝土試題及答案
- 武漢江岸區(qū)中考英語作文范文30篇
- 河南省駐馬店市遂平縣2023-2024學(xué)年七年級下學(xué)期6月期末英語試題(文字版含答案)
- 2025年浙江省初中學(xué)業(yè)水平考試數(shù)學(xué)卷(含答案)
- 2025年廣東省深圳中考數(shù)學(xué)考前沖刺(含詳解)
- 2025園林綠化養(yǎng)護合同示范文本
- TLK1-IN-1-生命科學(xué)試劑-MCE
- Neuroprotective-agent-8-生命科學(xué)試劑-MCE
- Goserelin-d10-ICI-118630-d-sub-10-sub-生命科學(xué)試劑-MCE
- 2025借款合同范本參考
- 特種設(shè)備風(fēng)險管控清單
- 配電箱產(chǎn)品質(zhì)量保證書
- 現(xiàn)代企業(yè)管理理論與實務(wù)
- 一年級100以內(nèi)計算練習(xí)題(口算、豎式)-100以內(nèi)的計算題
- 中亞高校漢語國際教育發(fā)展現(xiàn)狀研究
- 《新求精德語強化教程 中級Ⅱ》(第三版)學(xué)習(xí)指南【詞匯短語+單元語法+課文精解+全文翻譯+練習(xí)答案】
- 蘇教版六年級下冊數(shù)學(xué)《3、可能性》課件
- 美國超聲心動圖學(xué)會推薦的成人右心功能評價指南的解讀
- 慢病健康管理 高血壓患者隨訪評估與分類干預(yù)
- 夏季防暑降溫培訓(xùn)課件
- 【淺析如何將游戲化課程融入幼兒一日活動之中2600字】
評論
0/150
提交評論