




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上 串的基本操作 一、實驗目的、意義(1)理解串的堆分配存儲結構。(2)理解用它們表示時插入,生成串,聯接串與求子串的算法。(3)根據具體問題的需要,能夠設計出相關算法。二、實驗內容及要求說明1:學生在上機實驗時,需要自己設計出所涉及到的函數,同時設計多組輸入數據并編寫主程序分別調用這些函數,調試程序并對相應的輸出作出分析;修改輸入數據,預期輸出并驗證輸出的結果,加深對有關算法的理解。具體要求:定義串的堆分配存儲,完成串的基本操作:插入,生成串,聯接串,求子串等。3、 實驗所涉及的知識點C語言算法、循環算法、串的堆分配存儲結構、插入,生成串,聯接串與求子串的算法。四、實
2、驗結果及分析(所輸入的數據及相應的運行結果,運行結果要有提示信息,運行結果采用截圖方式給出。) 五、總結與體會(調試程序的心得與體會,若實驗課上未完成調試,要認真找出錯誤并分析原因等。)調試程序時,出現了許多錯誤。如:串的堆分配存儲結構、串的聯接等。另外還有一些語法上的錯誤。由于對所學知識點概念模糊,試驗課上未能完成此次上機作業。后來經過查閱教材,瀏覽網頁等方式,才完成試驗。這次試驗出現錯誤最重要的原因就是對課本知識點理解不深刻以及編寫代碼時的粗心。以后要都去練習、實踐,以完善自己的不足。六、程序清單(包含注釋)#include <stdio.h>#include <mall
3、oc.h>#include <stdlib.h>typedef char Status;int strlen(char *p) int i=0; while(*p+)i+; return i;typedef structchar *ch;/ 若是非空串,則按串長分配存儲區,否則ch為NULL int length; / 串長度 HString;/ 初始化(產生空串)字符串Tvoid InitString(HString *T)(*T).length=0;(*T).ch=NULL;/ 生成一個其值等于串常量chars的串T Status StrAssign(HString *T
4、, char *chars)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
5、;return 1;/ 由串S復制得串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(
6、S.length = 0 && 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的元素個數,稱為串的長度 int StrLength(HString
7、S)return S.length;/ 將S清為空串 int ClearString(HString *S)if(*S).ch)free(*S).ch);(*S).ch=NULL;(*S).length=0;return 1;/ 用T返回由S1和S2聯接而成的新串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);/分配新串的長
8、度if(!(*T).ch)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)retu
9、rn 0;if(*Sub).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中的位置,否則返回
10、0 int Index(HString 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等長的子串,循環直到找到SubString(&sub,S,i,m);/從第i個位置開始求得子串if(StrCompare(sub,T)!=0)/將求得的子串與T對比,若不等則i+i;elsereturn i;return 0;/ 算法4.4/ 在串S的第pos個字符之
11、前插入串Tsint StrInsert(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).ch
12、i; for(i=0;i<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,
13、(*S).length*sizeof(char);return 1;/ 用V替換主串S中出現的所有與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); / 結果i為從上一個i之后找到的子串T的位置 if(i) / 串S中存在串T StrDelete(S,i,StrLength(T); / 刪除該串T StrInsert(S,i,V); / 在原串T的位置插入串V i+=StrLength(V
14、); / 在插入的串V后面繼續查找串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(
15、&t); InitString(&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='='e
16、lsec='>'printf("串s%c串tn",c);Concat(&r,t,s);printf("串t聯接串s產生的串r為: ");StrPrint(r);StrAssign(&s,"oo");printf("串s為: ");StrPrint(s);StrAssign(&t,"o");printf("串t為: ");StrPrint(t);Replace(&r,t,s);printf("把串r中和串t相同的子
17、串用串s代替后,串r為:n");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("復制串t為串r,串t為: ");StrPrint(t);StrInsert(&t,6,s);printf("在串t的第6個字符前插入串s后,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南建筑職業技術學院《牧草與飼料作物栽培學》2023-2024學年第二學期期末試卷
- 運動誘發心律失常防治-洞察及研究
- 南京師范大學中北學院《教師職業“六個一”工程》2023-2024學年第二學期期末試卷
- 重慶建筑工程職業學院《非參數統計實驗》2023-2024學年第二學期期末試卷
- 建東職業技術學院《鑄牢中華民族共同體專題》2023-2024學年第二學期期末試卷
- 湖北水利水電職業技術學院《現代生物學專題》2023-2024學年第二學期期末試卷
- 華科大電站鍋爐原理課件07煤粉爐及燃燒設備
- 滁州學院《藝術情感與表達》2023-2024學年第二學期期末試卷
- 廣東食品藥品職業學院《新手教師訓練營》2023-2024學年第二學期期末試卷
- 四川水利職業技術學院《設計專業創新創業指導》2023-2024學年第二學期期末試卷
- 2024-2025學年初中英語七年級下冊期末考試綜合測試卷及參考答案
- 2025年山東省濟南市長清區中考二模道德與法治試題(含答案)
- 未來中國檢測市場發展趨勢簡析(精)
- 2025年AI+賦能中小企業:出海營銷的創新與發展
- 2025年福建省糧食行業職業技能競賽(糧油保管員)備賽試題庫(含答案)
- 四川電網新建電源并網服務指南(2025年)
- 事故隱患內部報告獎勵制度
- JBT 11699-2013 高處作業吊籃安裝、拆卸、使用技術規程
- KTV工程預算表模板
- 外墻、屋面節能保溫旁站監理記錄表(共3頁)
- 園林綠化單位(子單位)工程質量竣工驗收報告
評論
0/150
提交評論