數(shù)據(jù)結(jié)構(gòu)課程設(shè)計串基本操作演示系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計串基本操作演示系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計串基本操作演示系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計串基本操作演示系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計串基本操作演示系統(tǒng)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、附件1:學(xué) 號: 2010131328課 程 設(shè) 計課程名數(shù)據(jù)結(jié)構(gòu)題 目串基本操作演示系統(tǒng)學(xué) 院計信學(xué)院專 業(yè)計算機班 級10級計算機三班學(xué)生姓名指導(dǎo)教師2011 年12月21日課程設(shè)計任務(wù)書學(xué)生姓名: 專業(yè)班級: 2010級計算機三班 指導(dǎo)教師: 工作單位: 重慶工商大學(xué) 題 目: 串基本操作演示系統(tǒng)已知技術(shù)參數(shù)和設(shè)計要求:基本功能要求:實現(xiàn)若干串的基本操作,如串賦值、求串長、串的比較、串的替換、求子串、串的模式匹配等。要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)(1)設(shè)計的題目要求達(dá)到一定工作量,并具有一定的深度和難度,程序代碼不得少于300行。(2)

2、對設(shè)計問題進(jìn)行分析研究,運用所學(xué)知識,確定設(shè)計思路及方案,并有相應(yīng)文檔產(chǎn)生。(3)要求設(shè)計的軟件能夠正確運行,達(dá)到題目要求。(4)編寫出課程設(shè)計說明書(并附程序源代碼),以電子文檔方式上交教師批閱。時間安排: 理解所設(shè)計的題目,確定初步設(shè)計方案 編代碼調(diào)試和測試 編寫設(shè)計說明書 指導(dǎo)教師簽名: 年 月 日串基本操作演示系統(tǒng)-課程設(shè)計說明書重慶工商大學(xué)計算機科學(xué)與信息工程學(xué)院摘要:實現(xiàn)若干串的基本操作,如串賦值、求串長、串的比較、串的替換、求子串、串的模式匹配等。關(guān)鍵字:串,函數(shù)調(diào)用一.基本任務(wù)設(shè)計串基本操作演示系統(tǒng),系統(tǒng)需要實現(xiàn)如下基本功能:(1)給串賦值;(2)判斷兩個串是否相等;(3)串的

3、復(fù)制;(4)求串的長度;(5)求一個串的子串;(6)將兩個串連接起來形成一個串;(7)串的插入;(8)串的刪除;(9)串的替換;(10)串的比較;(11)串的模式匹配;(12)串的逆序輸出;二.設(shè)計概要為了完成需求分析的基本任務(wù),主要從以下3個方面進(jìn)行設(shè)計:2.1主界面設(shè)計為了實現(xiàn)串基本操作演示系統(tǒng)的各個功能,定義了一個非緊縮式的順序串,來實現(xiàn)串的基本操作。2.2數(shù)據(jù)結(jié)構(gòu)設(shè)計系統(tǒng)采用順序表的順序存儲結(jié)構(gòu)表示和存儲串的內(nèi)容。其中順序表的結(jié)構(gòu)體有2個數(shù)據(jù)項組成:存放串字符的數(shù)組,串長。2.3系統(tǒng)功能設(shè)計系統(tǒng)設(shè)計了12個子功能模塊,12個子功能模塊的描述如下:(1)串賦值子模塊:可以給串賦予一個字符

4、串常量,該功能由StrAssign()函數(shù)實現(xiàn)。 (2)判斷兩個串是否相等子模塊:判斷兩個串是否相等,相等則返回1,否則返回0,該功能由StrEqual()函數(shù)實現(xiàn)。(3)串長度子模塊:返回串中的字符個數(shù),該功能由StrLength()函數(shù)實現(xiàn)。(4)串的子串子模塊:求一個串的子串,該功能由SubStr()函數(shù)實現(xiàn)。(5)串的匹配子模塊:判斷兩個串是否模式匹配,該功能由StrIndex()函數(shù)實現(xiàn)。(6)串連接子模塊:將兩個串連接起來形成一個新的串,該功能由Concat()函數(shù)實現(xiàn)。(7)串替換子模塊:將一個串的某一子串用另一個串代替形成新串,該功能由RepStr()函數(shù)實現(xiàn)。(8)串插入子模

5、塊:在一個串中插入另一個串形成新串,該功能由InsStr()函數(shù)實現(xiàn)。(9)串刪除子模塊:將一個串的某一子串刪除形成新串,該功能由DelStr()函數(shù)實現(xiàn)。(10)串比較子模塊:比較兩個串的大小,該功能由Strcmp()函數(shù)實現(xiàn)。(11)串復(fù)制子模塊:將一個串復(fù)制給另一個串,該功能由StrCopy()函數(shù)實現(xiàn)。(12)串逆序子模塊:將串逆序輸出,該功能由ReverseSq()函數(shù)實現(xiàn)。三.模塊設(shè)計3.1模塊設(shè)計系統(tǒng)主要包含主函數(shù)模塊和其他子函數(shù)模塊,其調(diào)用關(guān)系如圖所示:子函數(shù)模塊主函數(shù)模塊模塊函數(shù)調(diào)用示意圖3.2系統(tǒng)子模塊及其功能設(shè)計本系統(tǒng)包含了12個功能子函數(shù),各程序的函數(shù)名及功能如下:(1

6、)StrAssign()函數(shù):給串賦予一個字符串常量。(2)StrEqual()函數(shù):判斷兩個串是否相等,相等則返回1,否則返0。(3)StrLength()函數(shù):返回串中的字符個數(shù)。(4)SubStr()函數(shù):求一個串的子串。(5)StrIndex()函數(shù):判斷兩個串是否模式匹配。(6)Concat()函數(shù):將兩個串連接起來形成一個新的串。(7)RepStr()函數(shù):將一個串的某一子串用另一個串代替形成新串。(8)InsStr()函數(shù):在一個串中插入另一個串形成新串。(9)DelStr()函數(shù):將一個串的某一子串刪除形成新串。(10)Strcmp()函數(shù):比較兩個串的大小。(11)StrCo

7、py()函數(shù):將一個串復(fù)制給另一個串。(12)ReverseSq()函數(shù):將串逆序輸出。四.詳細(xì)設(shè)計4.1數(shù)據(jù)結(jié)構(gòu)設(shè)計系統(tǒng)采用順序表的順序存儲結(jié)構(gòu)存儲串的信息,其結(jié)構(gòu)體類型定義如下:#define MaxSize 100typedef structchar dataMaxSize;/存放串字符int len; /串長SqString;4.2系統(tǒng)主要模塊設(shè)計(1)主函數(shù):main()函數(shù),在其里面調(diào)用各個功能函數(shù),以實現(xiàn)他們的功能,算法如下:int main()int i,j,m,n;SqString str1,str2,s1,s2,s3,s4,s5; char cstr180,cstr280;

8、printf("Enter a string1:");/提示用戶輸入字符串i=0; while(cstr1i=getchar()!='n')i+;cstr1i='0' printf("Enter a string2:");j=0; while(cstr2j=getchar()!='n')j+;cstr2j='0'/1 串的賦值printf("()串的賦值n");StrAssign(str1,cstr1);StrAssign(str2,cstr2);printf("

9、;str1=");DispStr(str1);printf("str2=");DispStr(str2);/2 判斷兩個串是否相等printf("(2)判斷串str1和str2是否相等:n");m=StrEqual(str1,str2);if(m=0)printf("str1與str2不相等!n");elseprintf("str1與str2相等!n");/3 串的長度printf("()串的長度n");printf("str1的長度為:%dn",StrLength

10、(str1); printf("str2的長度為:%dn",StrLength(str2);/4 求串的子串printf("()串的子串:n"); printf("提取串str1的第個字符開始的個字符而產(chǎn)生串s1n");s1=SubStr(str1,2,3);DispStr(s1);/5 串的匹配printf("()串的匹配n");if(StrIndex(str1,str2)!=-1)printf("匹配成功!n");elseprintf("匹配失敗!n"); printf(

11、"n"); /6 串的連接printf("()串的連接n");printf("將串str1和串str2連接起來形成串s2:n");s2=Concat(str1,str2);DispStr(s2); /7 串的替換printf("()串的替換n");printf("在串str1中,將第個字符開始的個字符構(gòu)成的子串用str2替換,形成s3:n");s3=RepStr(str1,3,4,str2);DispStr(s3);/8 串的插入 printf("()將串str2插入到串str1的第個

12、字符中,形成串s4:n");s4=InsStr(str1,2,str2); DispStr(s4);/9 串的刪除printf("(9)從串str1中刪去第個字符開始的長度為的子串,形成串s5:n");s5=DelStr(str1,2,3); DispStr(s5);/10 串的比較printf("(10)串的比較:n");n=Strcmp(str1,str2);if(n=0)printf("str1=str2n");else if(n=1)printf("str1>str2n");elseprin

13、tf("str1<str2n"); /11 串的復(fù)制printf("(11)串的復(fù)制n");StrCopy(str1,str2);printf("復(fù)制后的str1為:");DispStr(str1); /12 串逆序printf("(12)將串str1逆序輸出:n"); ReverseSq(str1);DispStr(str1); return 0;(2)各個功能函數(shù)及其算法實現(xiàn):實現(xiàn)串賦值的函數(shù):void StrAssign(SqString &s,char cstr) int i; for(i=0

14、;cstri!='0'i+) s.datai=cstri; s.len=i;判斷串是否相等的函數(shù):int StrEqual(SqString s,SqString t) int same=1,i; if (s.len!=t.len) /長度不相等時返回 same=0;else for (i=0;i<s.len;i+) if (s.datai!=t.datai)/有一個對應(yīng)字符不相同時返回 same=0; return same;實現(xiàn)串復(fù)制的函數(shù):void StrCopy(SqString &s,SqString t) int i; for(i=0;i<t.l

15、en;i+) s.datai=t.datai; s.len=t.len;求串長的函數(shù):int StrLength(SqString s)return s.len;求子串的函數(shù):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)return str; /參數(shù)不正確時返回空串for(k=i-1;k<i+j-1;k+) /將s.datai.i+j復(fù)制到strstr.datak-i+1=s.datak;str.len=j;

16、return str;串的匹配查詢的函數(shù):int StrIndex(SqString s,SqString t)/s為主串,t為模式串int i=0,j=0;while(i<s.len&&j<t.len)/是否到末尾if(s.datai=t.dataj)/主串與模式串逐一匹配i+;j+;else/否則,回溯重新開始下一次匹配i=i-j+1;/主串從下一個位置開始j=0;/模式串從頭開始 if(j>=t.len) /如果匹配成功return (i-t.len);/返回主串第一個下標(biāo)elsereturn -1;/匹配失敗,返回-1實現(xiàn)串連接的函數(shù)SqString

17、Concat(SqString s,SqString t) SqString str;int i;str.len=s.len+t.len;for(i=0;i<s.len;i+) /將s復(fù)制到strstr.datai=s.datai;for(i=0;i<t.len;i+) /將t復(fù)制到strstr.datas.len+i=t.datai;return str;實現(xiàn)串替換的函數(shù):SqString RepStr(SqString s,int i,int j,SqString t) int k;SqString str;str.len=0;if(i<=0|i>s.len|i+j

18、-1>s.len) /參數(shù)不正確時返回空串return str;for(k=0;k<i-1;k+) /將s.data0.i-2復(fù)制到strstr.datak=s.datak;for(k=0;k<t.len;k+) /將t復(fù)制到strstr.datai+k-1=t.datak;for(k=i+j-1;k<s.len;k+) /將s.datai+j-1.s.len-1復(fù)制到strstr.datat.len+k-j=s.datak;str.len=s.len-j+t.len;return str;實現(xiàn)串的插入的函數(shù):SqString InsStr(SqString s1,in

19、t i,SqString s2) int j;SqString str;str.len=0;if(i<=0|i>s1.len+1) /參數(shù)不正確時返回空串return str; for(j=0;j<i-1;j+) /將s1.data0.i-2復(fù)制到strstr.dataj=s1.dataj;for(j=0;j<s2.len;j+) /將s2復(fù)制到strstr.datai+j-1=s2.dataj;for(j=i-1;j<s1.len;j+) /將s1.datai-1.s1.len-1復(fù)制到strstr.datas2.len+j=s1.dataj;str.len=s

20、1.len+s2.len;return str;實現(xiàn)串的刪除的函數(shù):SqString DelStr(SqString s,int i,int j) int k; SqString str; str.len=0; if (i<=0 | i>s.len| i+j>s.len+1) /參數(shù)不正確時返回空串printf("參數(shù)不正確n"); return str; for (k=0;k<i-1;k+)/將s.data0s.datai-2復(fù)制到str str.datak=s.datak; for (k=i+j-1;k<s.len;k+)/將s.datai

21、+j-1datas.length-1復(fù)制到str str.datak-j=s.datak; str.len=s.len-j; return str;實現(xiàn)串的比較的函數(shù):int Strcmp(SqString s,SqString t) int i,comlen;if(s.len<t.len)comlen=s.len; /求s和t的共同長度elsecomlen=t.len;for(i=0;i<comlen;i+) /在共同長度內(nèi)逐個字符比較if(s.datai<t.datai)return -1;else if(s.datai>t.datai)return 1;if(s.

22、len=t.len) return 0; /s=telse if(s.len<t.len) return -1; /s<telse return 1; /s>t實現(xiàn)串逆序輸出的函數(shù):void ReverseSq(SqString &str)int i,j;char t;i=0;j=str.len-1;/首尾調(diào)換while(i<j) t=str.datai;str.datai=str.dataj;str.dataj=t;i+;j-;五.調(diào)試分析系統(tǒng)運行結(jié)果如下:六.用戶使用說明用戶可任意輸入兩個串,系統(tǒng)將會自動對這兩個串進(jìn)行比較,復(fù)制,判斷是否相等,刪除,插入,替

23、換等一系列串的基本操作。七.參考文獻(xiàn)(1)數(shù)據(jù)結(jié)構(gòu)教程 清華大學(xué)出版社 2009年3月第3版(2)C語言程序設(shè)計 高等教育出版社 2008年1月第1版(3)數(shù)據(jù)結(jié)構(gòu)教程上機實驗指導(dǎo) 清華大學(xué)出版社 (4)數(shù)據(jù)結(jié)構(gòu)(C語言)實踐教程 西安電子科技大學(xué)出版社八. 對所設(shè)計的軟件進(jìn)行自我評價這個軟件所運用了這學(xué)期所學(xué)的數(shù)據(jù)結(jié)構(gòu)編寫,在要求實現(xiàn)的功能上另外加了功能,如串的插入,刪除,連接,逆序輸出等。讓這個軟件的編寫方式不僅僅局限于常規(guī)的編程思想上。沒有未解決的問題。此軟件能夠正確運行并得到正確結(jié)果。創(chuàng)新點應(yīng)該在于擴大了軟件的功能。九.程序源代碼#include <stdio.h>#inc

24、lude <stdlib.h>#include <string.h>/定義順序串#define MaxSize 100typedef structchar dataMaxSize;/存放串字符int len; /串長SqString;/串賦值void StrAssign(SqString &s,char cstr) int i; for(i=0;cstri!='0'i+) s.datai=cstri; s.len=i;/判斷串是否相等int StrEqual(SqString s,SqString t) int same=1,i; if (s.l

25、en!=t.len) /長度不相等時返回 same=0; else for (i=0;i<s.len;i+) if (s.datai!=t.datai)/有一個對應(yīng)字符不相同時返回 same=0; return same;/將串t復(fù)制給串svoid StrCopy(SqString &s,SqString t) int i; for(i=0;i<t.len;i+) s.datai=t.datai; s.len=t.len;/求串長int StrLength(SqString s)return s.len;/求子串SqString SubStr(SqString s,int

26、i,int j) SqString str;int k;str.len=0;if(i<=0|i>s.len|j<0|i+j-1>s.len)return str; /參數(shù)不正確時返回空串for(k=i-1;k<i+j-1;k+) /將s.datai.i+j復(fù)制到strstr.datak-i+1=s.datak;str.len=j;return str;/串的匹配查詢(順序串)int StrIndex(SqString s,SqString t)/s為主串,t為模式串int i=0,j=0;while(i<s.len&&j<t.len)/

27、是否到末尾if(s.datai=t.dataj)/主串與模式串逐一匹配i+;j+;else/否則,回溯重新開始下一次匹配i=i-j+1;/主串從下一個位置開始j=0;/模式串從頭開始 if(j>=t.len) /如果匹配成功return (i-t.len);/返回主串第一個下標(biāo)elsereturn -1;/匹配失敗,返回-1/串的連接:返回由兩個串連接在一起的新串SqString Concat(SqString s,SqString t) SqString str;int i;str.len=s.len+t.len;for(i=0;i<s.len;i+) /將s復(fù)制到strstr.

28、datai=s.datai;for(i=0;i<t.len;i+) /將t復(fù)制到strstr.datas.len+i=t.datai;return str;/串的替換SqString RepStr(SqString s,int i,int j,SqString t) int k;SqString str;str.len=0;if(i<=0|i>s.len|i+j-1>s.len) /參數(shù)不正確時返回空串return str;for(k=0;k<i-1;k+) /將s.data0.i-2復(fù)制到strstr.datak=s.datak;for(k=0;k<t.l

29、en;k+) /將t復(fù)制到strstr.datai+k-1=t.datak;for(k=i+j-1;k<s.len;k+) /將s.datai+j-1.s.len-1復(fù)制到strstr.datat.len+k-j=s.datak;str.len=s.len-j+t.len;return str;/插入串:將串s2插入到串s1的第i個字符中SqString InsStr(SqString s1,int i,SqString s2) int j;SqString str;str.len=0;if(i<=0|i>s1.len+1) /參數(shù)不正確時返回空串return str; fo

30、r(j=0;j<i-1;j+) /將s1.data0.i-2復(fù)制到strstr.dataj=s1.dataj;for(j=0;j<s2.len;j+) /將s2復(fù)制到strstr.datai+j-1=s2.dataj;for(j=i-1;j<s1.len;j+) /將s1.datai-1.s1.len-1復(fù)制到strstr.datas2.len+j=s1.dataj;str.len=s1.len+s2.len;return str;/串的刪除SqString DelStr(SqString s,int i,int j) int k; SqString str; str.len

31、=0; if (i<=0 | i>s.len| i+j>s.len+1) /參數(shù)不正確時返回空串printf("參數(shù)不正確n"); return str; for (k=0;k<i-1;k+)/將s.data0s.datai-2復(fù)制到str str.datak=s.datak; for (k=i+j-1;k<s.len;k+)/將s.datai+j-1datas.length-1復(fù)制到str str.datak-j=s.datak; str.len=s.len-j; return str;/串比較int Strcmp(SqString s,Sq

32、String t) int i,comlen;if(s.len<t.len)comlen=s.len; /求s和t的共同長度elsecomlen=t.len;for(i=0;i<comlen;i+) /在共同長度內(nèi)逐個字符比較if(s.datai<t.datai)return -1;else if(s.datai>t.datai)return 1;if(s.len=t.len) return 0; /s=telse if(s.len<t.len) return -1; /s<telse return 1; /s>t/串逆序void ReverseSq(

33、SqString &str)int i,j;char t;i=0;j=str.len-1;/首尾調(diào)換while(i<j) t=str.datai;str.datai=str.dataj;str.dataj=t;i+;j-;/輸出串void DispStr(SqString str) int i; if (str.len>0) for (i=0;i<str.len;i+) printf("%c",str.datai);printf("n"); int main()int i,j,m,n;SqString str1,str2,s1,

34、s2,s3,s4,s5; char cstr180,cstr280;printf("Enter a string1:");/提示用戶輸入字符串i=0; while(cstr1i=getchar()!='n')i+;cstr1i='0' printf("Enter a string2:");j=0; while(cstr2j=getchar()!='n')j+;cstr2j='0'/1 串的賦值printf("()串的賦值n");StrAssign(str1,cstr1);StrAssign(str2,cstr2);printf("str1=");DispStr(str1);printf("str2=");DispStr(str2);/2 判斷兩個串是否相等printf("(2)判斷串str1和str2是否相等:n");m=StrEqual(str1,str2);if(m=0)printf("str1與str2不相等!n");elseprintf("str1與str2相等!n");/3 串的長度printf("()串的長度n

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論