版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)</p><p> 題 目 串基本操作的演示 </p><p> 學(xué) 院 計(jì)算機(jī)學(xué)院 </p><p> 專 業(yè) 網(wǎng)絡(luò)工程 </p><p> 一.、課程設(shè)計(jì)任務(wù)要求</p><p
2、> 在教科書4.2.2節(jié)用堆分配存儲(chǔ)表示實(shí)現(xiàn)HString串的最小操作子集的基礎(chǔ)上,實(shí)現(xiàn)串抽象數(shù)據(jù)類型的其余基本操作(不使用C語(yǔ)言本身提供的串函數(shù))。參數(shù)合法性檢查必須嚴(yán)格。 說(shuō)明:(在格式中,Φ表示0個(gè)、1個(gè)或多個(gè)空格所組成的串。〈串標(biāo)識(shí)〉表示一個(gè)內(nèi)部名或一個(gè)串文字。前者是一個(gè)串的唯一標(biāo)識(shí),是一種內(nèi)部形式的(而不是字符形式的)標(biāo)識(shí)符。后者是兩端由單引號(hào)括起來(lái)的僅可打印字符組成的序列。串內(nèi)每?jī)蓚€(gè)連續(xù)的單引號(hào)表示一個(gè)單引號(hào)符。)
3、</p><p> 利用上述基本操作函數(shù)構(gòu)造以下系統(tǒng):它是一個(gè)命令解釋程序,循環(huán)往復(fù)地處理用戶鍵入的每一條命令,直至終止程序的命令為止。命令定義如下: </p><p> ?。?)賦值。格式:AΦ〈串標(biāo)識(shí)〉Φ〈回車〉 用〈串標(biāo)識(shí)〉所表示的值建立新</p><p> 串,并顯示新串的內(nèi)部名和串值。如:A′Hi!′</p><p> ?。?/p>
4、2) 判相等。 格式:EΦ〈串標(biāo)識(shí)1〉Φ〈串標(biāo)識(shí)2〉Φ〈回車〉 </p><p> 若兩串相等,則顯示“EQUAL”,否則顯示“UNEQUAL”。 </p><p> (3) 聯(lián)接。 格式:CΦ〈串標(biāo)識(shí)1〉Φ〈串標(biāo)識(shí)2〉Φ〈回車〉 </p><p> 將兩串聯(lián)接產(chǎn)生結(jié)果串,它的內(nèi)部名和串值都顯示出來(lái)。 </p><p> ?。?) 求長(zhǎng)
5、度 格式:LΦ〈串標(biāo)識(shí)〉Φ〈回車〉 顯示串的長(zhǎng)度。 </p><p> ?。?) 求子串 格式:SΦ〈串標(biāo)識(shí)〉Φ+〈數(shù)1〉Φ+〈數(shù)2〉Φ〈回車〉 </p><p> 如果參數(shù)合法,則顯示子串的內(nèi)部名和串值?!磾?shù)〉不帶正負(fù)號(hào)。 </p><p> ?。?)子串定位。 格式:IΦ〈串標(biāo)識(shí)1〉Φ〈串標(biāo)識(shí)2〉Φ〈回車〉 </p><p> 顯示第
6、二個(gè)串在第一個(gè)串中首次出現(xiàn)時(shí)的位置。 </p><p> ?。?)串替換 格式:RΦ〈串標(biāo)識(shí)1〉Φ〈串標(biāo)識(shí)2〉Φ〈串標(biāo)識(shí)2〉Φ〈回車〉 </p><p> 將第一個(gè)串中出現(xiàn)所有出現(xiàn)的第二個(gè)串用第三個(gè)串替換,顯示結(jié)果串的內(nèi)部名和 串值,原串不變。 </p><p> (8)顯示。格式PΦ〈回車>顯示所有在系統(tǒng)中被保持的串的內(nèi)部名和串值的對(duì)照表</p&
7、gt;<p> (9)刪除。格式DΦ〈內(nèi)部名>Φ〈回車>刪除該內(nèi)部名對(duì)應(yīng)的串,即賦值的逆操作。</p><p> ?。?)退出 格式:QΦ〈回車〉 結(jié)束程序的運(yùn)行。</p><p> 二、已完成的項(xiàng)目及完成程度 </p><p> ?。?) 賦值。 StrAssign(SqString &s,char cstr[])<
8、/p><p> ?。?) 判相等。 StrEqual(SqString s,SqString t)</p><p> (3) 聯(lián)接。 Concat(SqString s,SqString t)</p><p> ?。?) 求長(zhǎng)度 。StrLength(SqString s)</p><p> ?。?) 求子串 。SubStr(SqString
9、 s,int i,int j)</p><p> (6)子串定位。 Index(linkstring *s,linkstring *t)</p><p> ?。?)串替換 。Replace(linkstring *&s,linkstring *t,linkstring *r) </p><p> ?。?)顯示。 Dispstr(linkstri
10、ng *s)</p><p> ?。?)刪除。 DelStr(SqString s,int i,int j)</p><p> ?。?)退出 。Quit()</p><p> 完成了項(xiàng)目要求的大部分所有操作。</p><p> 三、理論依據(jù)、用到的數(shù)據(jù)結(jié)構(gòu),及舉例</p><p><b> 定義串的基本
11、主結(jié)構(gòu)</b></p><p> ADT String{</p><p> 數(shù)據(jù)對(duì)象:D={ai| ai∈charcaterset,i=1,2,…,n,n>=0}</p><p> 數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D, i=1,2,…,n}</p><p> 基本操作:
12、 </p><p> StrCompare(HString S,HString T)</p><p> 初始條件:S和T是已存在的Hstring類型。</p><p> 操作結(jié)果:比較其值,顯示結(jié)果“UNEQUAL”或“EQUAL”。</p><p> StrLength(HString S)</p><p>
13、 初始條件:S是已存在的Hstring類型。</p><p> 操作結(jié)果:返回該串的長(zhǎng)度。</p><p> Concat(HString S1,HString S2)</p><p> 初始條件:S1和S2是已存在的Hstring類型。</p><p> 操作結(jié)果:由S1和S2聯(lián)接成新串。</p><p>
14、 Index(HString S,HString t)</p><p> 初始條件:S和T是已存在的Hstring類型。</p><p> 操作結(jié)果:顯示第二個(gè)串在第一個(gè)串中首次出現(xiàn)的起始位置。</p><p> Replace(HString M, HString t, HString v)</p><p> 初始條件:M、t和v
15、是已存在的Hstring類型。</p><p> 操作結(jié)果:將第一個(gè)串中所有出現(xiàn)的第二個(gè)串用第三個(gè)串替換,顯示結(jié)果串的內(nèi)部名和串值,原串不變。</p><p> SubString(HString S,int pos,int len)</p><p> 初始條件:S是已存在的Hstring類型。</p><p> 操作結(jié)果:如果參數(shù)合
16、法,則顯示子串的內(nèi)部名和串值 。</p><p> Strprint(HString S)</p><p> 初始條件:S是已存在的Hstring類型。</p><p> 操作結(jié)果:顯示串S的內(nèi)部名和串值 。</p><p> getin(int n)</p><p> 初始條件:處理命令串S1,</p
17、><p> 操作結(jié)果:把串值存入串頭表中</p><p> Insert(int n)</p><p> 初始條件:要給指定的串賦值,n為指定的串的內(nèi)部名</p><p> 操作結(jié)果:為指定內(nèi)部名的串賦值</p><p><b> show()</b></p><p>
18、; 初始條件:要求查看輸入格式</p><p> 操作結(jié)果:輸出各種命令的輸入格式</p><p> }ADT String</p><p> typedef struct</p><p><b> {</b></p><p> char *ch; //若是非空串,則按串長(zhǎng)
19、分配存儲(chǔ)區(qū),否則ch為NULL</p><p> int length; //串長(zhǎng)度</p><p><b> }HString;</b></p><p><b> 主要算法流程圖</b></p><p> E C L S R
20、 D Q </p><p><b> 主要代碼</b></p><p><b> 引用的頭文件:</b></p><p> #include <stdio.h></p><p> #include <stdlib.h></p>
21、<p> #include <string.h></p><p><b> 使用的結(jié)構(gòu)體:</b></p><p> typedef struct {</p><p> char data[MaxSize];//存放串字符</p><p> int len; //串長(zhǎng)
22、</p><p> }SqString;</p><p> 關(guān)鍵函數(shù)功能實(shí)現(xiàn): </p><p> void Scanf(char cstrr[]){ // 輸入字符串</p><p> cstrr[100];</p><p> printf("Enter a string:\n");//
23、提示用戶輸入字符串</p><p><b> int j=0;</b></p><p> while((cstrr[j]=getchar())!='\n')</p><p><b> j++;</b></p><p> cstrr[j]='\0';</p
24、><p><b> }</b></p><p><b> //串賦值</b></p><p> void StrAssign(SqString &s,char cstr[])</p><p><b> { </b></p><p> S
25、canf(cstr);</p><p><b> int i;</b></p><p> for(i=0;cstr[i]!='\0';i++)</p><p> s.data[i]=cstr[i];</p><p><b> s.len=i;</b></p>&
26、lt;p><b> }</b></p><p><b> //判斷串是否相等</b></p><p> int StrEqual(SqString s,SqString t)</p><p><b> {</b></p><p> int same=1,i;&l
27、t;/p><p> if (s.len!=t.len) //長(zhǎng)度不相等時(shí)返回</p><p><b> same=0;</b></p><p><b> else </b></p><p><b> {</b></p><p> fo
28、r (i=0;i<s.len;i++)</p><p> if (s.data[i]!=t.data[i])//有一個(gè)對(duì)應(yīng)字符不相同時(shí)返回</p><p><b> same=0;</b></p><p><b> }</b></p><p> return same;</p&
29、gt;<p><b> }</b></p><p> //將串t復(fù)制給串s</p><p> void StrCopy(SqString &s,SqString t)</p><p><b> {</b></p><p><b> int i;</b&
30、gt;</p><p> for(i=0;i<t.len;i++)</p><p> s.data[i]=t.data[i];</p><p> s.len=t.len;</p><p><b> }</b></p><p><b> //求串長(zhǎng)</b><
31、;/p><p> int StrLength(SqString s)</p><p><b> {</b></p><p> return s.len;</p><p><b> }</b></p><p><b> //求子串</b></p
32、><p> SqString SubStr(SqString s,int i,int j)</p><p><b> {</b></p><p> SqString str;</p><p><b> int k;</b></p><p> str.len=0;<
33、/p><p> if(i<=0||i>s.len||j<0||i+j-1>s.len)</p><p> return str; //參數(shù)不正確時(shí)返回空串</p><p> for(k=i-1;k<i+j-1;k++) //將s.data[i..i+j]復(fù)制到str<
34、/p><p> str.data[k-i+1]=s.data[k];</p><p> str.len=j;</p><p> return str;</p><p><b> }</b></p><p> //串的連接:返回由兩個(gè)串連接在一起的新串</p><p>
35、 SqString Concat(SqString s,SqString t)</p><p><b> {</b></p><p> SqString str;</p><p><b> int i;</b></p><p> str.len=s.len+t.len;</p>
36、<p> for(i=0;i<s.len;i++) //將s復(fù)制到str</p><p> str.data[i]=s.data[i];</p><p> for(i=0;i<t.len;i++) //將t復(fù)制到str</p><p> str.data[s.len+i]=t.data[i];</p>
37、<p> return str;</p><p><b> }</b></p><p><b> //串的替換</b></p><p> SqString RepStr(SqString s,int i,int j,SqString t)</p><p><b>
38、{</b></p><p><b> int k;</b></p><p> SqString str;</p><p> str.len=0;</p><p> if(i<=0||i>s.len||i+j-1>s.len) //參數(shù)不正確時(shí)返回空串</p>&l
39、t;p> return str;</p><p> for(k=0;k<i-1;k++) //將s.data[0..i-2]復(fù)制到str</p><p> str.data[k]=s.data[k];</p><p> for(k=0;k<t.len;k++) //將t復(fù)制到str<
40、/p><p> str.data[i+k-1]=t.data[k];</p><p> for(k=i+j-1;k<s.len;k++) //將s.data[i+j-1..s.len-1]復(fù)制到str</p><p> str.data[t.len+k-j]=s.data[k];</p><p> str.len=s
41、.len-j+t.len;</p><p> return str;</p><p><b> }</b></p><p><b> //串的刪除</b></p><p> SqString DelStr(SqString s,int i,int j)</p><p>
42、;<b> {</b></p><p><b> int k;</b></p><p> SqString str;</p><p> str.len=0;</p><p> if (i<=0 || i>s.len|| i+j>s.len+1) //參數(shù)不正確時(shí)返回空
43、串</p><p><b> {</b></p><p> printf("參數(shù)不正確\n");</p><p> return str;</p><p><b> }</b></p><p> for (k=0;k<i-1;k++)
44、//將s.data[0]~s.data[i-2]復(fù)制到str</p><p> str.data[k]=s.data[k];</p><p> for (k=i+j-1;k<s.len;k++)//將s.data[i+j-1]~data[s.length-1]復(fù)制到str</p><p> str.data[k-j]=s.data[k];</p
45、><p> str.len=s.len-j;</p><p> return str;</p><p><b> }</b></p><p><b> //串比較</b></p><p> int Strcmp(SqString s,SqString t)</p&
46、gt;<p><b> {</b></p><p> int i,comlen;</p><p> if(s.len<t.len)</p><p> comlen=s.len; //求s和t的共同長(zhǎng)度</p><p><b> else</b></
47、p><p> comlen=t.len;</p><p> for(i=0;i<comlen;i++){ //在共同長(zhǎng)度內(nèi)逐個(gè)字符比較</p><p> if(s.data[i]<t.data[i])</p><p> return -1;</p><p> else if(s.data[i]>
48、;t.data[i])</p><p><b> return 1;</b></p><p><b> }</b></p><p> if(s.len==t.len) </p><p> return 0; //s==t</p><p>
49、; else if(s.len<t.len) </p><p> return -1; //s<t</p><p> else </p><p> return 1; //s>t</p><p><b> }</b></p>
50、<p><b> //輸出串</b></p><p> void DispStr(SqString str)</p><p><b> {</b></p><p><b> int i;</b></p><p> if (str.len>0)<
51、;/p><p><b> {</b></p><p> for (i=0;i<str.len;i++)</p><p> printf("%c",str.data[i]);</p><p> printf("\n");</p><p><b&
52、gt; }</b></p><p><b> }</b></p><p><b> // 菜單函數(shù)</b></p><p> void menus(){</p><p> int i,j,m,x,y;</p><p><b> char n;
53、</b></p><p> printf("***************************************************\n");</p><p> printf("******** A 賦值 E 判斷相等 C 聯(lián)接********\n");</p><p> p
54、rintf("******** L 求長(zhǎng)度 S 求子串 I 子串定位****\n");</p><p> printf("******** R 串替換 P 顯示 D 刪除 *******\n");</p><p> printf("******** Q 退出
55、 ******\n");</p><p> scanf("%c",&n);</p><p> getchar();</p><p> switch(n)</p><p><b> {</b></p><p><b&g
56、t; case 'A':</b></p><p><b> case 'a':</b></p><p> printf("A 請(qǐng)輸入需要賦值的串 \n");</p><p> StrAssign(str1,cstr1);</p><p> prin
57、tf("輸出str1=");</p><p> DispStr(str1);</p><p><b> menus();</b></p><p><b> break;</b></p><p><b> case 'E':</b>&l
58、t;/p><p><b> case 'e':</b></p><p> printf("E 判斷串str1和str2是否相等:\n");</p><p> StrAssign(str1,cstr1);</p><p> StrAssign(str2,cstr2);</p&g
59、t;<p> m=StrEqual(str1,str2);</p><p><b> if(m==1)</b></p><p> printf("EQUAL\n");</p><p><b> else</b></p><p> printf("
60、NUEQUAL\n");</p><p><b> menus();</b></p><p><b> break;</b></p><p><b> case 'C':</b></p><p><b> case 'c
61、9;:</b></p><p> printf("輸入要連接的兩個(gè)串:\n");</p><p> printf("將串str1和串str2連接起來(lái)形成串s1:\n");</p><p> StrAssign(str1,cstr1);</p><p> StrAssign(str2,
62、cstr2);</p><p> s1=Concat(str1,str2);</p><p> DispStr(s1);</p><p><b> menus();</b></p><p><b> break;</b></p><p><b> case
63、 'L':</b></p><p><b> case 'l':</b></p><p> printf("輸入要求長(zhǎng)度的串:\n");</p><p> StrAssign(str1,cstr1);</p><p> printf("st
64、r1的長(zhǎng)度為:%d\n",StrLength(str1));</p><p><b> menus();</b></p><p><b> break;</b></p><p><b> case 'S':</b></p><p> case
65、's':</p><p> printf("提取串str1的第a個(gè)字符開(kāi)始的b個(gè)字符而產(chǎn)生串s2\n");</p><p> StrAssign(str1,cstr1);</p><p><b> int a,b;</b></p><p> scanf("%d %d
66、",&a,&b);</p><p> s2=SubStr(str1,a,b);</p><p> DispStr(s2);</p><p><b> menus();</b></p><p><b> break;</b></p><p>&
67、lt;b> case 'R':</b></p><p><b> case 'r':</b></p><p> printf("在串str1中,將第p個(gè)字符開(kāi)始的q個(gè)字符構(gòu)成的子串用str2替換,形成s3:\n");</p><p> StrAssign(str1,c
68、str1);</p><p><b> int p,q;</b></p><p> scanf("%d %d",&p,&q);</p><p> StrAssign(str2,cstr2);</p><p> s3=RepStr(str1,p,q,str2);</p>
69、;<p> DispStr(s3);</p><p><b> menus();</b></p><p><b> break;</b></p><p><b> case 'D':</b></p><p><b> case
70、'd':</b></p><p> printf("從串str1中刪去第i個(gè)字符開(kāi)始的長(zhǎng)度為j的子串,形成串s3:\n");</p><p> StrAssign(str1,cstr1);</p><p><b> int x,y;</b></p><p> sca
71、nf("%d %d",&x,&y);</p><p> s3=DelStr(str1,x,y);</p><p> DispStr(s3);</p><p><b> menus();</b></p><p><b> break;</b></p&g
72、t;<p><b> case 'Q':</b></p><p><b> case 'q':</b></p><p><b> break;</b></p><p><b> }</b></p><p&g
73、t;<b> }</b></p><p> void main() //主函數(shù)</p><p><b> {</b></p><p><b> menus();</b></p><p><b> }</b></p><p&g
74、t;<b> 六、實(shí)驗(yàn)截圖</b></p><p><b> 1. 測(cè)試用例</b></p><p> (1) A s = deng <回車> ,應(yīng)顯示s = deng ; </p><p> (2) E “ “ <回車> ,應(yīng)顯示 “EQUAL”;</p><p
75、> (3) E ‘a(chǎn)bc’ ‘a(chǎn)bcd’ <回車>,應(yīng)顯示“UNEQUAL”;</p><p> (4) I ‘a(chǎn)’ “ <回車>,應(yīng)報(bào)告:參數(shù)非法; </p><p> (5)R ‘ dengbolun’ ‘2 4 ’ ‘ huizhi’<回車>,應(yīng)顯示 ‘ba’;</p><p> (6) D ‘
76、dengbolun ’ ‘2 4’<回車>,應(yīng)顯示:dolun;</p><p> (7)D ‘fdhagkjh’ ‘ 3 6 ’ <回車>,應(yīng)顯示:fdjh;</p><p> ?。?)C ‘deng’ ‘bolun’ <回車>,應(yīng)顯示:dengbolun; </p><p> ?。?)L ‘a(chǎn)bcdefg’<回車&
77、gt;,應(yīng)顯示:7;</p><p><b> 2. 程序截圖</b></p><p><b> 實(shí)驗(yàn)結(jié)果分析</b></p><p> 經(jīng)檢驗(yàn),測(cè)試數(shù)據(jù)預(yù)期結(jié)果和測(cè)試得出結(jié)果一致。</p><p><b> 小結(jié)</b></p><p> 本
78、實(shí)驗(yàn)是在Microsoft Visual C++上實(shí)現(xiàn)的</p><p> 本次實(shí)驗(yàn)學(xué)到了很多知識(shí):</p><p> 1)熟悉串的定義和串的基本操作。</p><p> 2)掌握順序串的基本運(yùn)算。</p><p> 3)加深對(duì)串?dāng)?shù)據(jù)結(jié)構(gòu)的理解,逐步培養(yǎng)解決實(shí)際問(wèn)題的編程能力。</p><p> 4)運(yùn)用到了
79、串的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),對(duì)鏈表也有了進(jìn)一步提高。</p><p><b> 附錄:源代碼</b></p><p> #include <stdio.h></p><p> #include <stdlib.h></p><p> #include <string.h></p&g
80、t;<p><b> //定義順序串</b></p><p> #define MaxSize 100</p><p> typedef struct</p><p><b> {</b></p><p> char data[MaxSize];//存放串字符</p&g
81、t;<p> int len; //串長(zhǎng)</p><p> }SqString;</p><p> void menus();</p><p> void Scanf(char cstrr[]){</p><p> cstrr[100];</p><p> printf(&
82、quot;Enter a string:\n");//提示用戶輸入字符串</p><p><b> int j=0;</b></p><p> while((cstrr[j]=getchar())!='\n')</p><p><b> j++;</b></p><p&g
83、t; cstrr[j]='\0';</p><p><b> }</b></p><p><b> //串賦值</b></p><p> void StrAssign(SqString &s,char cstr[])</p><p><b> { &l
84、t;/b></p><p> Scanf(cstr);</p><p><b> int i;</b></p><p> for(i=0;cstr[i]!='\0';i++)</p><p> s.data[i]=cstr[i];</p><p><b>
85、 s.len=i;</b></p><p><b> }</b></p><p><b> //判斷串是否相等</b></p><p> int StrEqual(SqString s,SqString t)</p><p><b> {</b></p
86、><p> int same=1,i;</p><p> if (s.len!=t.len) //長(zhǎng)度不相等時(shí)返回</p><p><b> same=0;</b></p><p><b> else </b></p><p><b> {<
87、;/b></p><p> for (i=0;i<s.len;i++)</p><p> if (s.data[i]!=t.data[i])//有一個(gè)對(duì)應(yīng)字符不相同時(shí)返回</p><p><b> same=0;</b></p><p><b> }</b></p>
88、<p> return same;</p><p><b> }</b></p><p> //將串t復(fù)制給串s</p><p> void StrCopy(SqString &s,SqString t)</p><p><b> {</b></p>&
89、lt;p><b> int i;</b></p><p> for(i=0;i<t.len;i++)</p><p> s.data[i]=t.data[i];</p><p> s.len=t.len;</p><p><b> }</b></p><p&
90、gt;<b> //求串長(zhǎng)</b></p><p> int StrLength(SqString s)</p><p><b> {</b></p><p> return s.len;</p><p><b> }</b></p><p>
91、<b> //求子串</b></p><p> SqString SubStr(SqString s,int i,int j)</p><p><b> {</b></p><p> SqString str;</p><p><b> int k;</b></
92、p><p> str.len=0;</p><p> if(i<=0||i>s.len||j<0||i+j-1>s.len)</p><p> return str; //參數(shù)不正確時(shí)返回空串</p><p> for(k=i-1;k<i+j-1;k++)
93、 //將s.data[i..i+j]復(fù)制到str</p><p> str.data[k-i+1]=s.data[k];</p><p> str.len=j;</p><p> return str;</p><p><b> }</b></p><p> //串的連接:返回由
94、兩個(gè)串連接在一起的新串</p><p> SqString Concat(SqString s,SqString t)</p><p><b> {</b></p><p> SqString str;</p><p><b> int i;</b></p><p>
95、 str.len=s.len+t.len;</p><p> for(i=0;i<s.len;i++) //將s復(fù)制到str</p><p> str.data[i]=s.data[i];</p><p> for(i=0;i<t.len;i++) //將t復(fù)制到str</p><p> str.da
96、ta[s.len+i]=t.data[i];</p><p> return str;</p><p><b> }</b></p><p><b> //串的替換</b></p><p> SqString RepStr(SqString s,int i,int j,SqString t)
97、</p><p><b> {</b></p><p><b> int k;</b></p><p> SqString str;</p><p> str.len=0;</p><p> if(i<=0||i>s.len||i+j-1>s.le
98、n) //參數(shù)不正確時(shí)返回空串</p><p> return str;</p><p> for(k=0;k<i-1;k++) //將s.data[0..i-2]復(fù)制到str</p><p> str.data[k]=s.data[k];</p><p> for(k=0;k<t.len
99、;k++) //將t復(fù)制到str</p><p> str.data[i+k-1]=t.data[k];</p><p> for(k=i+j-1;k<s.len;k++) //將s.data[i+j-1..s.len-1]復(fù)制到str</p><p> str.data[t.len+k-j]=s.data[k];
100、</p><p> str.len=s.len-j+t.len;</p><p> return str;</p><p><b> }</b></p><p><b> //串的刪除</b></p><p> SqString DelStr(SqString s,
101、int i,int j)</p><p><b> {</b></p><p><b> int k;</b></p><p> SqString str;</p><p> str.len=0;</p><p> if (i<=0 || i>s.len
102、|| i+j>s.len+1) //參數(shù)不正確時(shí)返回空串</p><p><b> {</b></p><p> printf("參數(shù)不正確\n");</p><p> return str;</p><p><b> }</b></p><
103、p> for (k=0;k<i-1;k++)//將s.data[0]~s.data[i-2]復(fù)制到str</p><p> str.data[k]=s.data[k];</p><p> for (k=i+j-1;k<s.len;k++)//將s.data[i+j-1]~data[s.length-1]復(fù)制到str</p><p>
104、 str.data[k-j]=s.data[k];</p><p> str.len=s.len-j;</p><p> return str;</p><p><b> }</b></p><p><b> //串比較</b></p><p> int Strc
105、mp(SqString s,SqString t)</p><p><b> {</b></p><p> int i,comlen;</p><p> if(s.len<t.len)</p><p> comlen=s.len; //求s和t的共同長(zhǎng)度</p><p&g
106、t;<b> else</b></p><p> comlen=t.len;</p><p> for(i=0;i<comlen;i++){ //在共同長(zhǎng)度內(nèi)逐個(gè)字符比較</p><p> if(s.data[i]<t.data[i])</p><p> return -1;</p>
107、<p> else if(s.data[i]>t.data[i])</p><p><b> return 1;</b></p><p><b> }</b></p><p> if(s.len==t.len) </p><p> return 0;
108、 //s==t</p><p> else if(s.len<t.len) </p><p> return -1; //s<t</p><p> else </p><p> return 1; //s>t</p><p>&
109、lt;b> }</b></p><p><b> //輸出串</b></p><p> void DispStr(SqString str)</p><p><b> {</b></p><p><b> int i;</b></p>
110、<p> if (str.len>0)</p><p><b> {</b></p><p> for (i=0;i<str.len;i++)</p><p> printf("%c",str.data[i]);</p><p> printf("\n&qu
111、ot;);</p><p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> menus();</b>&l
112、t;/p><p><b> }</b></p><p> char cstr1[80],cstr2[80];</p><p> SqString str1,str2,s1,s2,s3;</p><p> void menus(){</p><p> int i,j,m,x,y;</p
113、><p><b> char n;</b></p><p> printf("***************************************************\n");</p><p> printf("******** A 賦值 E 判斷相等 C 聯(lián)接********\
114、n");</p><p> printf("******** L 求長(zhǎng)度 S 求子串 I 子串定位****\n");</p><p> printf("******** R 串替換 P 顯示 D 刪除 *******\n");</p><p> printf(&quo
115、t;******** Q 退出 ******\n");</p><p> scanf("%c",&n);</p><p> getchar();</p><p> switch(n)</p><p><b> {</
116、b></p><p><b> case 'A':</b></p><p><b> case 'a':</b></p><p> printf("A 請(qǐng)輸入需要賦值的串 \n");</p><p> StrAssign(str1,c
117、str1);</p><p> printf("輸出str1=");</p><p> DispStr(str1);</p><p><b> menus();</b></p><p><b> break;</b></p><p><b&g
118、t; case 'E':</b></p><p><b> case 'e':</b></p><p> printf("E 判斷串str1和str2是否相等:\n");</p><p> StrAssign(str1,cstr1);</p><p>
119、; StrAssign(str2,cstr2);</p><p> m=StrEqual(str1,str2);</p><p><b> if(m==1)</b></p><p> printf("EQUAL\n");</p><p><b> else</b><
120、;/p><p> printf("NUEQUAL\n");</p><p><b> menus();</b></p><p><b> break;</b></p><p><b> case 'C':</b></p>&
121、lt;p><b> case 'c':</b></p><p> printf("輸入要連接的兩個(gè)串:\n");</p><p> printf("將串str1和串str2連接起來(lái)形成串s1:\n");</p><p> StrAssign(str1,cstr1);</
122、p><p> StrAssign(str2,cstr2);</p><p> s1=Concat(str1,str2);</p><p> DispStr(s1);</p><p><b> menus();</b></p><p><b> break;</b><
123、;/p><p><b> case 'L':</b></p><p><b> case 'l':</b></p><p> printf("輸入要求長(zhǎng)度的串:\n");</p><p> StrAssign(str1,cstr1);</
124、p><p> printf("str1的長(zhǎng)度為:%d\n",StrLength(str1));</p><p><b> menus();</b></p><p><b> break;</b></p><p><b> case 'S':</
125、b></p><p> case 's':</p><p> printf("提取串str1的第a個(gè)字符開(kāi)始的b個(gè)字符而產(chǎn)生串s2\n");</p><p> StrAssign(str1,cstr1);</p><p><b> int a,b;</b></p&
126、gt;<p> scanf("%d %d",&a,&b);</p><p> s2=SubStr(str1,a,b);</p><p> DispStr(s2);</p><p><b> menus();</b></p><p><b> break
127、;</b></p><p><b> case 'R':</b></p><p><b> case 'r':</b></p><p> printf("在串str1中,將第p個(gè)字符開(kāi)始的q個(gè)字符構(gòu)成的子串用str2替換,形成s3:\n");</p
128、><p> StrAssign(str1,cstr1);</p><p><b> int p,q;</b></p><p> scanf("%d %d",&p,&q);</p><p> StrAssign(str2,cstr2);</p><p> s
129、3=RepStr(str1,p,q,str2);</p><p> DispStr(s3);</p><p><b> menus();</b></p><p><b> break;</b></p><p><b> case 'D':</b><
130、/p><p><b> case 'd':</b></p><p> printf("從串str1中刪去第i個(gè)字符開(kāi)始的長(zhǎng)度為j的子串,形成串s3:\n");</p><p> StrAssign(str1,cstr1);</p><p><b> int x,y;<
131、;/b></p><p> scanf("%d %d",&x,&y);</p><p> s3=DelStr(str1,x,y);</p><p> DispStr(s3);</p><p><b> menus();</b></p><p>&l
132、t;b> break;</b></p><p><b> case 'Q':</b></p><p><b> case 'q':</b></p><p><b> break;</b></p><p><b>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 對(duì)于串及其基本操作的課程設(shè)計(jì)
- 串的存儲(chǔ)表示及基本操作_課程設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---串的基本操作
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---串的應(yīng)用及其基本操作
- 數(shù)據(jù)結(jié)構(gòu)-串的存儲(chǔ)表示及基本操作--課程設(shè)計(jì)-實(shí)驗(yàn)報(bào)告
- edi原理演示操作國(guó)商
- edi原理演示操作國(guó)商
- php字符串操作函數(shù)
- 上?;炯本妊菔灸0?/a>
- 課程設(shè)計(jì)--字符串的操作
- 仿真操作演示在護(hù)理技術(shù)操作考核中的應(yīng)用
- word的基本操作
- 鉗工的基本操作
- praat的基本操作
- cad的基本操作
- windows的基本操作
- oa工作流程操作演示
- 伽瑪釘手術(shù)操作演示
- vi的基本操作
- 鉗工的基本操作
評(píng)論
0/150
提交評(píng)論