版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)實驗報告報告名稱 串的操作 專 業(yè) 網(wǎng)絡(luò)工程 班 級 1001 學(xué) 號 201003120129 姓 名 張劍 指導(dǎo)教師 陳淑紅 李珍輝 黃哲 2012年 5月8日 一、實驗?zāi)康模菏煜ご愋偷膶崿F(xiàn)方法,了解簡單文字處理的設(shè)計方法。二、實驗內(nèi)容與基本要求:1. 設(shè)計可以在主串s中第i個位置之前插入一個子串t的程序。2. 設(shè)計可以在主串s中從第i個位置開始共取m個字符,求子串的程序。3. 設(shè)計一個程序求子串t在主串s中的起始位置 三、概要設(shè)計:1.數(shù)據(jù)結(jié)構(gòu):#include <stdio.h>#define MaxSize 100 /*最多的字符個數(shù)*/typedef stru
2、ct char dataMaxSize; /*定義可容納MaxSize個字符的空間*/ int len; /*標(biāo)記當(dāng)前實際串長*/ SqString;2.抽象數(shù)據(jù)類型:ADT String 數(shù)據(jù)對象:D ai |aiCharacterSet, i=1,2,.,n, n0 數(shù)據(jù)關(guān)系:R1 < ai-1, ai > | ai-1, ai D, i=2,.,n StrAssign (&T, chars) 初始條件:chars 是字符串常量。 操作結(jié)果:把 chars 賦為 T 的值。 StrCopy (&T, S) 初始條件:串 S 存在。 操作結(jié)果:由串 S 復(fù)制得串
3、T。DestroyString (&S) 初始條件:串 S 存在。 操作結(jié)果:串 S 被銷毀。StrEmpty(S)初始條件:串S存在。 操作結(jié)果:若 S 為空串,則返回 TRUE, 否則返回 FALSE。StrCompare (S, T)初始條件:串 S 和 T 存在。操作結(jié)果:若S > T,則返回值 > 0; 若S = T,則返回值 = 0; 若S < T,則返回值 < 0。 StrLength (S) 初始條件:串 S 存在。 操作結(jié)果:返回 S 的元素個數(shù), 稱為串的長度。Concat (&T, S1, S2) 初始條件:串 S1 和 S2 存在
4、。 操作結(jié)果:用 T 返回由 S1 和 S2聯(lián)接而成的新串SubString (&Sub, S, pos, len)初始條件:串 S 存在,1posStrLength(S) 且0lenStrLength(S)-pos+1。操作結(jié)果:用 Sub 返回串 S 的第 pos 個字符起 長度為 len 的子串。Index (S, T, pos)初始條件:串S和T存在,T是非空串,1posStrLength(S)。操作結(jié)果: 若主串 S 中存在和串 T 值相同 的子串, 則返回它在主串 S 中第pos個 字符之后第一次出現(xiàn)的位置; 否則函數(shù)值為0。 Replace (&S, T, V)
5、初始條件:串S, T和 V 均已存在且 T 是非空串。 操作結(jié)果:用V替換主串S中出現(xiàn)的所有與(模式串)T 相等的不重疊的子串。StrInsert (&S, pos, T)初始條件:串S和T存在, 1posStrLength(S)1。操作結(jié)果:在串S的第pos個字符之前 插入串T。StrDelete (&S, pos, len)初始條件:串S存在 1posStrLength(S)-len+1。操作結(jié)果:從串S中刪除第pos個字符 起長度為len的子串。 ClearString (&S) 初始條件:串S存在。 操作結(jié)果:將S清為空串四、詳細(xì)設(shè)計:#include <
6、stdio.h>#define MaxSize 100 /*最多的字符個數(shù)*/typedef struct char dataMaxSize; /*定義可容納MaxSize個字符的空間*/ int len; /*標(biāo)記當(dāng)前實際串長*/ SqString;void StrAssign(SqString &str,char cstr)/*str為引用型參數(shù)*/ int i;char aMaxSize;gets(a);cstr=a; for (i=0;cstri!='0'i+) str.datai=cstri; str.len=i;SqString InsStr(SqSt
7、ring s1,int i,SqString s2) int j; SqString str; str.len=0; if (i<=0 | i>s1.len+1) /*參數(shù)不正確時返回空串*/printf("參數(shù)不正確n"); return s1; for (j=0;j<i-1;j+) /*將s1.ch0s1.chi-2復(fù)制到str*/ str.dataj=s1.dataj; for (j=0;j<s2.len;j+) /*將s2.ch0s2.chs2.len-1復(fù)制到str*/ str.datai+j-1=s2.dataj; for (j=i-1;
8、j<s1.len;j+) /*將s1.chi-1s.chs1.len-1復(fù)制到str*/ str.datas2.len+j=s1.dataj; str.len=s1.len+s2.len; return str;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)printf("參數(shù)不正確n"); return str; /*參數(shù)不正確時返回空串*/ for (k=i-1;k&
9、lt;i+j-1;k+) /*將s.chis.chi+j復(fù)制到str*/ str.datak-i+1=s.datak; str.len=j; return str; int Index(SqString s,SqString t)int i=0,j=0;while(i<s.len&&j<t.len)if(s.datai=t.dataj)i+;j+;elsei=i-j+1;j=0;if(j>=t.len)return(i-t.len+1);elsereturn(-1);void DispStr(SqString str) int i; if (str.len&g
10、t;0) for (i=0;i<str.len;i+) printf("%c",str.datai);printf("n"); main() SqString s,s0,s1,s2,s3,s4,s5; char *p,*q,*r,*l,*m; int c,x,y,z,w; printf("/*本程序可實現(xiàn)如下功能*/n"); printf("t1.在主串s中第i個位置之前插入一個子串tnt2.在主串s中從第i個位置開始共取m個字符,求子串tnt3.求子串t在主串s中的起始位置tnt4.退出程序n"); whi
11、le(c) printf("請選擇您要進(jìn)入的功能: ");scanf("%d",&x); switch(x) case 1: getchar(); printf("請輸入主串S:"); StrAssign(s1,p); printf("請輸入子串T:"); StrAssign(s2,q); printf("請輸入插入位置i:"); scanf("%d",&y); InsStr(s1,y,s2); s=InsStr(s1,y,s2); printf("
12、輸出新串為: "); DispStr(s); break; case 2: getchar(); printf("請輸入主串S:"); StrAssign(s3,r); printf("從位置 y 開始取長度為 z 的子串:n"); scanf("%d%d",&y,&z); SubStr(s3,y,z); s0=SubStr(s3,y,z); printf("輸出子串為: "); DispStr(s0); break; case 3: getchar(); printf("請輸入
13、主串S:"); StrAssign(s4,l); printf("請輸入子串T:"); StrAssign(s5,m); Index(s4,s5); w=Index(s4,s5); if(w) printf("主串和子串在第%d個字符處首次匹配n",w); else printf("主串和子串匹配不成功n"); break; case 4: getchar();c=0;break; default:printf("輸入錯誤,請重試!n"); break; 五、調(diào)試分析及測試結(jié)果:測試數(shù)據(jù):1. 在主串s(
14、abcdefg)中第3個位置之前插入一個子串t(apple),輸出新串。2. 在主串s(thisisacprogram)中從第5個位置開始共取3個字符,求子串的程序。3. 主串s(thekingisababyandstrong),子串t(isababy),輸出子串t在主串s中的起始位置。 測試結(jié)果及分析: 圖一1.程序通過編譯后,運行程序。進(jìn)入選擇界面,該程序主要實現(xiàn)三個功能,如圖一所示?!?.在主串s中第i個位置之前插入一個子串;2.在主串s中從第i個位置開始共取m個字符,求子串;3.求子串t在主串s中的起始位置。”此界面通過switch分支語句實現(xiàn)。按相應(yīng)的數(shù)字鍵進(jìn)入相應(yīng)的功能。 圖二2.
15、按數(shù)字鍵1鍵實現(xiàn)串的插入功能。輸入主串“abcdefg”,依照提示輸入子串“apple”,選擇插入的位置為i=3;按回車鍵結(jié)束,輸入新串為“abapplecdefg”,程序運行正確,輸出結(jié)果無誤。在程序運行過程中,調(diào)用串的創(chuàng)建StrAssign()函數(shù),插入字符InsStr()函數(shù),以及字符串的輸出DispStr()函數(shù)。 圖三 3.輸入數(shù)字2,進(jìn)入從主串中的第i個位置開始共取m個字符,求子串的操作。該操作主要是SubStr()函數(shù)的實現(xiàn)。輸入主字符串“thisisacprogram”,從位置5開始取長度為3的字符串,輸出結(jié)果為“isa”,程序運行完畢,進(jìn)入功能選擇。 圖四4. 進(jìn)入功能4,求子串在主串s中的起始位置t;該過程主要實現(xiàn)Index()的用法。這里采用的是BrutForce算法
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 20870.4-2024半導(dǎo)體器件第16-4部分:微波集成電路開關(guān)
- 發(fā)展規(guī)劃部總經(jīng)理崗位職責(zé)說明
- 高中地理 第三章 自然資源的利用與保護(hù) 3.2 非可再生資源合理開發(fā)利用對策教案 新人教版選修6
- 八年級歷史下冊 第五單元 第15課《獨立自主的和平外交》教學(xué)設(shè)計含教后反思 新人教版
- 河北省淶水波峰中學(xué)七年級地理上冊 3.4 世界的氣候說課稿 新人教版
- 2023四年級數(shù)學(xué)上冊 七 三位數(shù)除以兩位數(shù)的除法說課稿 西師大版
- 2024-2025學(xué)年高二地理第3周教學(xué)設(shè)計
- 租奶牛合同(2篇)
- 綜合班組合同(2篇)
- 房屋租賃合同(2篇)
- 項目式課程與全課程設(shè)計
- 車間環(huán)境溫濕度控制
- 少兒體智能特色課程設(shè)計
- 小兒重癥肺炎查房中的胸腔積液處理
- AFP、DCP和GGT聯(lián)合檢測在原發(fā)性肝癌診斷中的應(yīng)用價值演示稿件
- 植物生理學(xué)試題及答案7
- 《消毒隔離制度》課件
- 新生入學(xué)校查驗預(yù)防接種證培訓(xùn)課件
- 建筑施工現(xiàn)場車輛管理方案
- 面部血管瘤的護(hù)理查房
- 新型腳手架材料研究
評論
0/150
提交評論