版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
串名串值(用‘’括起來)串即字符串,是由零個或多個字符組成的有限序列,是數(shù)據(jù)元素為單個字符的特殊線性表。記為:
s
=‘
a1
a2
……..an’ (n≥0
)4.1
串類型的定義隱含結(jié)束符‘\0’,即ASCII碼NULL為何要單獨
“串”類型?字符串操作比其他數(shù)據(jù)類型更復(fù)雜(如拷貝、連接操作)程序設(shè)計中,處理對象很多都是串類型。若干術(shù)語:串長:串中字符的個數(shù)(n≥0).n=0時稱為空串
??崭翊河梢粋€或多個空格符組成的串。問:空串和空格串有無區(qū)別?答:有區(qū)別??沾?Null
String)是指長度為零的串;而空格串(Blank
String),是指包含一個或多個空白字符‘
’(空格鍵)的字符串.子串:串S中任意個連續(xù)的字符序列叫S的子串;S叫主串。子串位置:子串的第一個字符在主串中的序號。字符位置:字符在串中的序號。串相等:串長度相等,且對應(yīng)位置上字符相等。例1:現(xiàn)有以下4個字符串:a=‘BEI’ b
=‘JING’ c
=‘BEIJING’ d
=‘BEIJING’問:①
他們各自的長度?
a=3,b
=4,c
=
7,d=8②a是哪個串的子串?在主串中的位置是多少?
a是c和d的子串,在c和d中的位置都是1③空串是哪個串的子串?a是不是自己的子串?“空串是任意串的子串;任意串S都是S本身的子串,除S本身外,S的其他子串稱為S的真子串?!薄稊?shù)據(jù)結(jié)構(gòu)與算法》中山大學(xué)ADT
String{Objects: D={ai
|ai∈CharacterSet,
i=1,
2,…,n,
n≥0}Relations:
R1={<ai-1,ai>
|
ai-1,ai
∈D,i=2,
…,n}functions://至少有13種基本操作StrAssign(&T,
chars)pare(S,T)StrLength(S)Concat(&T,
S1,
S2)//串賦值,生成值為chars的串T//串比較,若S>T,返回值大于0…//求串長,即返回串S中的元素個數(shù)//串連接,用T返回S1+S2的新串SubString(&Sub,S,pos,
len)
//求S中pos起長度為len的子串StrCopy(&T,S)……Index(S,
T,
pos)//由串S 得到T//子串定位函數(shù)(模式匹配),返回位置//用子串V替換子串TReplace(&S,
T,V)}ADT
String串的抽象數(shù)據(jù)類型定義(參見P71)最小操作子集復(fù)習(xí):C語言中常用的串運(yùn)算C串比較:int
strcmp(char
*s1,char
*s2);求串長:int
strlen(char
*s);串連接:char strcat(char
*to,char
*from)子串T定位:char
strchr(char
*s,char
*c);……參考C語言書注:用C處理字符串時,要調(diào)用標(biāo)準(zhǔn)庫函數(shù)#include<string.h>類Cpare(S,T)StrLength(S)Concat(&T,
S1,
S2)Index(S,
T,
pos)例如:可利用串比較、求串長和求子串等操作實現(xiàn)定位函數(shù)Index(S,T,
pos).算法基本思想:在主串S中取從第i(i=pos)個字符起,取長度和串T相等的子串和串T比較,若相等,則返回值為i否則i++,直到S中不存在和T相等的子串為止。Int
Index(String
S,String
T,int
pos){//T為非空串,若主串S中第pos個字符之后存在與T相等的子串,//則返回第一個這樣的子串在S中的位置,否則返回0;if(pos>0){n=StrLength(S);m=StrLength(T);i=pos;while(i<=n-m+1){pare
(SubString
(S,i,m),
T)!=0)
++i;return
i;if(else}//while}//ifreturn0;}//Index()pare(SubString(S,i,StrLength(T)),T)=?0sSnmi=posn-m+1subsubiTTReplace(&S,
T,V)//用子串V替換子串Tq=’WORKER’。求:例1:
設(shè)
s
=’I
AM
A STUDENT’,
t
=’GOOD’,StrLength(s)
=StrLength(t)
=Index(s,
‘A’)=Index(s,
t)=14 //參見P714SubString(&sub,
s,
8,
7)=
‘STUDENT’SubString(&sub,
t,2,1)=‘O’30
(
s中沒有t=’GOOD’?。㊣ndex(S,
T,
pos)//返回子串T在pos之后的位置Replace(&s,
‘STUDENT’,q
)=
’I
AM
A
WORKER’解:因為SubString(s,6,2)=‘A
’;SubString(s,7,8)=‘STUDENT’Concat(,t,SubString(s,7,8))=’GOOD
STUDENT’所以:Concat(,SubString(s,6,2),
Concat(t,SubString(s,7,8)))=‘A
GOOD
STUDENT’例2:設(shè)
s
=’I
AM
A STUDENT’,
t
=’GOOD’,求:Concat(
SubString(s,6,2), Concat(
t,SubString(s,7,8)
)
)
=?串的特點:串的邏輯結(jié)構(gòu)和線性表極為相似,區(qū)別僅在于串的數(shù)據(jù)對象約束為字符集;串的基本操作和線性表差別很大串的基本操作中,通常以“串的整體”作為操作對象。4.2
串的表示首先強(qiáng)調(diào):串與線性表的運(yùn)算有所不同,是以“串的整體”作為操作對象,例如查找某子串,在主串某位置上 一個子串等。串有三種機(jī)內(nèi)表示方法:定長順序
表示——用一組地址連續(xù)的 單元 串值的字符序列,屬靜態(tài) 方式。堆分配
表示——用一組地址連續(xù)的 單元 串值的字符序列,但
空間是在程序執(zhí)行過程中動態(tài)分配而得。串的塊鏈
表示——鏈?zhǔn)椒绞巾樞蜴準(zhǔn)蕉ㄩL順序
特點:用一組連續(xù)的單元來存放串,直接使用定長的字符數(shù)組來定義,數(shù)組的上界預(yù)先給出,故稱為靜態(tài)存儲分配。例如:#define
Maxstrlen
255
//用戶可用的最大串長typedefunsigned
char
SString[
Maxstrlen+1]
;
//P73SString
s; //s
是一個可容納255個字符的順序串。注:一般用SString[0]來存放串長信息;C語言約定在串尾加結(jié)束符‘\0’,以利操作加速,但不計入串長若字符串超過Maxstrlen
則自動截斷(因為靜態(tài)數(shù)組存不進(jìn)去)。例:用順序方式編寫求子串函數(shù)SubString(&Sub,S,pos,len)Status
SubString(SString
&sub,SString
S,
int
pos,intlen
){ if(pos<1
||
pos>S[0]
||
len<0
||
len>S[0]-pos+1)
return
ERROR;//若pos和len參數(shù)越界,則告警Sub[1……len]=S[pos……pos+len-1];Sub[0]=len; return
OK;}將串S中從第pos個字符開始、長度為len的字符序列 到串Sub中。(
慮到函數(shù)的通用性,應(yīng)當(dāng)讓串Sub的預(yù)留長度與S一樣)子串長度s
=‘
a1
a2
……..an’pos
lenSub[
]:想存放超長字符串怎么辦?改用動態(tài)分配的一維數(shù)組——堆堆分配
特點:仍用一組連續(xù)的單元來存放串,但存儲空間是在程序執(zhí)行過程中動態(tài)分配而得。思路:利用malloc函數(shù)合理預(yù)設(shè)串長空間。特點:
若在操作中串值改變,還可以利用realloc函數(shù)按新串長度增加空間(即動態(tài)數(shù)組概念)
。堆T的 結(jié)構(gòu)描述:Typedef
struct
{char
*ch;
//若非空串,按串長分配空間;否則ch=NULLint
length;
//串長度}HStringC是指針變量,可以自增!意即每次后移一個數(shù)據(jù)單元。直到終值為“假”停止,串尾特征是c=‘\0’=NULL=Status
StrAssign(HString
&T,
char
*chars){
//生成一個串T,T值←串常量charsif(T.ch)
free(T.ch);
// T原有空間for(i=0,c=chars;
c; ++i,++c);
//求chars的串長度i例1:編寫建堆函數(shù)(參見
P76)此處T.ch[0]沒有用來裝串長,因為另有T.length分量if
(
!i
)
{T.ch
=
NULL;
T.length
=
0;}else{if
(!(T.ch
=
(char*)malloc(
i
*sizeof(ch0ar))))exit(OVERFLOW);T.ch[0..i-1]
=
chars[0..i-1];T.length
=i;}Return
OK;}
//StrAssignStatus
StrInsert
(HString
&S, int
pos, HString
T
){
//在串S的第pos個字符之前(包括尾部)
串Tif
(pos<1||pos>S.length+1)
return
ERROR;if(T.length){if
(!(S.ch=(char*)realloc(S.ch,
(S.length+T.length)*sizeof(char))
))exit(OVERFLOW);for
(i=S.length-1;
i>=pos-1;
--i
)
S.ch[i+T.length]
=
S.ch[i];S.ch[pos-1…pos+T.length-2]
=
T.ch[0…T.length-1];S.length
+
=
T.length;} return
OK;}
//StrInsert例2:用“堆”方式編寫串 函數(shù)(參見
P75):法1密度為
;法2顯然,若更優(yōu)—稱為塊鏈結(jié)構(gòu)鏈?zhǔn)?/p>
特點
:用鏈表
串值,易
和刪除。法1:鏈表結(jié)點的數(shù)據(jù)分量長度取1(個字符)1/2密度為
4/5
;ABCINULLhead法2:鏈表結(jié)點(數(shù)據(jù)域)大小取n(例如n=4)headABCDEFGHI###NULL元素很多,用法2串值所占的
位置密度=實際分配的
位#define
CHUNKSIZE
80typedef
struct Chunk
{//每塊大小,可由用戶定義//首先定義結(jié)點類型char ch[CHUNKSIZE
];
//每個結(jié)點中的數(shù)據(jù)域struct Chunk
*next;
//每個結(jié)點中的指針域}Chunk;塊鏈類型定義:的串類型//其次定義用鏈?zhǔn)?/頭指針//尾指針//結(jié)點個數(shù)typedef struct
{Chunk
*head;Chunk
*tail;int
curLen;}Lstring;4.3
串的模式匹配算法
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025關(guān)于消防安全的責(zé)任合同書范文
- 2025關(guān)于商店承包合同的樣本
- 鐵路貨運(yùn)專用線建設(shè)合同三篇
- 培養(yǎng)創(chuàng)新人才的教研探索
- 2025合同無效的類型
- 2025前期物業(yè)服務(wù)合同(示范)
- 小學(xué)數(shù)學(xué)教育的市場潛力與開發(fā)
- 完善秋季教學(xué)設(shè)備與設(shè)施計劃
- 翻譯公司前臺服務(wù)總結(jié)
- 技術(shù)領(lǐng)域的創(chuàng)新團(tuán)隊構(gòu)建案例分享
- 2025年1月 浙江首考英語試卷
- 資本金管理制度文件模板
- 2025年急診科護(hù)理工作計劃
- 高中家長會 高二寒假線上家長會課件
- 2024-2025學(xué)年山東省聊城市高一上學(xué)期期末數(shù)學(xué)教學(xué)質(zhì)量檢測試題(附解析)
- 違規(guī)行為與處罰管理制度
- 個人教師述職報告錦集10篇
- 四川省等八省2025年普通高中學(xué)業(yè)水平選擇性考試適應(yīng)性演練歷史試題(含答案)
- 《內(nèi)部培訓(xùn)師培訓(xùn)》課件
- 《雷達(dá)原理》課件-3.3.3教學(xué)課件:相控陣?yán)走_(dá)
- 紅色中國風(fēng)蛇年年會邀請函
評論
0/150
提交評論